JavaScript------闭包

var add = (function () {
  var counter = 0;
  return function () {return counter += 1;}

})();

 

函数自调用直接执行了一次,创建了counter 变量 并且返回了匿名函数对象给add

add的函数体就是

{

  counter+=1;

}

counter并不在add函数体里定义 但是由于add是内嵌函数,可以访问外层函数的变量,所以并没有报错,

而且因为add的原因外层匿名函数并没有被析构掉(JS中不知道叫什么,借用C++的概念,因为JS外物皆对象,把外层函数也看成对象所以用析构来描述它)。counter的值得以持续存在并且更新。

 

 

console.log(add());
console.log(add());
console.log(add());

 

结果:

 

posted @ 2017-11-30 15:17  CTMDSH  阅读(104)  评论(0)    收藏  举报