这里是一个简单的JS逻辑问题。在下面的代码中,为什么add()只将counter设置为0一次?我觉得每次调用该函数时都应该将其重置为零。var add = (function () { var counter = 0; return function () {counter += 1; return counter}})();add(); // 1add(); // 2谢谢!
1 回答
Cats萌萌
TA贡献1805条经验 获得超9个赞
您误解了代码。该函数add()不包含代码var counter = 0。
这是完全相同的代码的重写,使其更加清晰:
var add;
// Note: THIS function is NOT add()
(function () {
var counter = 0;
// THIS function is add()
add = function () {counter += 1; return counter}
})();
add(); // 1
add(); // 2
除了如何分配之外,上面的代码与原始代码执行的操作完全相同add。在您的代码中,它是通过返回值分配的,但在上面我只是将它直接分配为全局变量,以便更清楚哪个函数是add()。
另一种更像原始代码的方式是显式命名这两个函数:
var function1 = function () {
var counter = 0;
// The returned function is what will be assigned to add()
return function () {counter += 1; return counter}
}; // Do not call it yet since calling it was what was confusing you
var add = function1();
add(); // 1
add(); // 2
添加回答
举报
0/150
提交
取消