猿问

Javascript 闭包变量只初始化一次?

这里是一个简单的JS逻辑问题。在下面的代码中,为什么add()只将counter设置为0一次?我觉得每次调用该函数时都应该将其重置为零。


var add = (function () {

  var counter = 0;

  return function () {counter += 1; return counter}

})();

add(); // 1

add(); // 2

谢谢!


喵喔喔
浏览 86回答 1
1回答

Cats萌萌

您误解了代码。该函数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(); // 1add(); // 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 youvar add = function1();add(); // 1add(); // 2
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答