闭包-计数器

学习闭包时的计数器例子:

 1 function makeCounter() {
 2       let count = 0;
 3             
 4       return function() {
 5          return count++;
 6          };
 7      }
 8     let counter = makeCounter();
 9     alert(counter());   //0
10     alert(counter());   //1
11     alert(counter());   //2

 

没学习闭包之前不是很懂,每次调用makeCounter()的时候不都把count变量置为0了吗?学习闭包后我的理解:

makeCounter()返回的是一个函数,如果直接alert( makeCounter() )是这样的:

 

代码第8行let counter = makeCounter()后,调用counter()即为调用第四行的嵌套函数。

第一次调用counter()后立即创建新的词法环境,但该词法环境属性中没有count变量,于是向外部函数的词法环境寻找count变量,寻找到count=0,对count++,由于使用的是后置++,此次返回的还是0,但count变量已经是1了。(若使用前置++则第一次返回的是1)

第二次调用后与第一次相同,向外部寻找count,此时count是1,对其后置++后变为2,但返回的仍然是1。以此类推。

 

上述仅为学习后的个人理解,如有错误还请指正。

 

posted @ 2020-04-22 14:24  LangZ-  阅读(301)  评论(0编辑  收藏  举报