一、闭包(closure)是JavaScript中非常重要的一个特性,这意味着当前作用域总是能够访问外部作用域中的变量。 因为函数是 JavaScript 中唯一拥有自身作用域的结构,因此闭包的创建依赖于函数。

了解闭包,首先得清楚两点:1.在JavaScript中函数也是一个对象。2.JavaScript中变量的作用域的范围。

首先,来看一个例子:

function foo(x){

  var tmp = 3;//如果不用var声明,tmp就是一个全局变量

  function bar(y){

    console.log(x+y+(++tmp));

}

  bar(10);

}

foo(2);//16

foo(2);//16

 无论调用多少次,值都是16.当然这还不是闭包。返回一个函数,才是一个闭包。

function foo(x){

  var tmp = 3;

  return function(y){

    console.log(x+y+(++tmp));

}

}

var bar = foo(2);//此时bar是一个闭包

bar(10);//16

bar(10);//17

bar(10);//18

我们用闭包实现了用bar读取foo函数中的局部变量tmp并且让tmp始终在内存中(从多次调用时,tmp值+1可以看出,tmp始终在内存中)。

posted on 2016-03-01 14:59  tse_tung  阅读(126)  评论(0)    收藏  举报