下面函数执行结果为啥会是2?,每次调用时不是已经将counter重新初始化了吗?还有就是()()是立即执行函数,那么为啥用var add = ...定义add()时return中没有调用counter?困惑好久,请大神帮忙解答下var add=(function(){ var counter=0;
return function(){
counter+=1;
}
})();
add();
add();//输出结果为2
1 回答
慕森卡
TA贡献1806条经验 获得超8个赞
你可以改成
var add = (function() { var counter = 0; return function() { counter += 1; console.log(counter) } }); add()(); add()(); //输出结果为1
首先add
是一个立即执行函数表达式,在f1
函数作用域里创建了变量counter
,然后在f2
的函数作用域上访问了f1
词法作用域下的counter
(就是所谓的闭包),一直访问的都是那一个。
var add=(function f1(){ var counter=0; return function f2(){ counter+=1; } })(); add(); add();//输出结果为2
添加回答
举报
0/150
提交
取消