为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

喵喔喔 2023-07-29 15:01:44
这里是一个简单的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


查看完整回答
反对 回复 2023-07-29
  • 1 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信