您的位置:首页 > Web前端 > JavaScript

javascript的一些特性

2014-03-17 12:54 357 查看
一,作用域

   1) 在javascript中的作用域并不是像c中那样以花括号为一个作用域

   如:

      if(true){

            var val = 'laumin';

      } 

      console.log(val);//如果在c语言中这会报错,因为val未定义,而在javascript中是完全合法的

  2)函数作用域(或叫局部作用域)

        在javascript中引用一个变量时先从局部变量搜索,如果没有再向上层作用域搜索,直到全局作用域

var val = 'one';
function lau(){
console.log(val);
}
lau();//输出one

function min(){
var val = 'two';
console.log(val);
}
min();//输出two


在看看如下的函数

var val = 'laumin';
var lau = function(){
console.log(val);
var  val = 'hehe';
}
lau();//输出 undefined
是否它的输出出乎意料,想想js变量搜索顺序就知道了,它会先在lau的作用域内搜索,发现有val变量,但当执行consol.log()时val 还为定义,所以输出undefined

注:javascript的作用域是静态作用域(又叫词法作用域),在语法分析时就能确定它的作用域,而不是运行是确定的,看如下例子就能明白了

var  val = 'lau';
function lau(){
console.log(val);
}
lau();//输出 lau

function min(){
var  val = 'min';
lau();
}
min();//输出 lau


3.全局作用域(全局对象,全局变量)
     1) 浏览器端的window ,nodejs中的 global

     2)模块化编程应该避免全局变量

二,闭包

   1)闭包的严格定义:有函数(环境)及其封闭的自由变量组成的集合体。

   2)闭包不但包括被返回的函数,还包括了函数的定义环境

var laumin(){
var count = 0;
var get = function(){
count++;
return count;
};
return get;
}

var counter = laumin();
console.log(counter());//输出1
console.log(counter());//输出2

2. 闭包的作用

    1)嵌套的回调函数

    2)实现私有成员
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript