这里有一个简单的JS逻辑问题。在下面的代码中,为什么add()仅将counter设置为0一次?我觉得每次调用该函数都应将其重置为零。
var add = (function () {
var counter = 0;
return function () {counter += 1; return counter}
})();
add(); // 1
add(); // 2
谢谢!
答案 0 :(得分:4)
您误解了代码。函数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