下面函数执行结果为啥会是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
提交
取消
