var add = (function () { var counter = 0; return function () {return counter += 1;}})();add();add();add();console.log(add()) //结果是4var add = function () { var counter = 0; return function () {return counter += 1;}};add()();add()();add()();console.log(add()()) //结果是1
3 回答
cxxyjsj
TA贡献119条经验 获得超22个赞
第一种是闭包的写法. 注意一下第4行最后的(); 程序运行到第4行,实际已经执行了匿名方法,并且把返回值(方法)赋值给add. 因此add每次调用都进行counter++.最终结果为4
第二种就是一个方法定义,每次调用add()时候返回方法,然后再调用返回的方法,这就导致了counter每次都被重新初始化为0. 因此不管执行多少次,结果都是1
ruibin
TA贡献358条经验 获得超213个赞
闭包作用域问题,你每调用一次函数就产生一个作用域,第一种方式外层函数被调用一次,并返回一个函数,以后调用这个返回的内层函数,外层函数作用域的变量被保存下来。 第二种方式每次都调用一次外层函数,每次都有不同的作用域,所以每次外层函数的的值都是新的。
添加回答
举报
0/150
提交
取消