gpt4 book ai didi

javascript - 闭包如何帮助函数了解前一个函数调用的私有(private)变量

转载 作者:行者123 更新时间:2023-11-29 10:28:20 24 4
gpt4 key购买 nike

我试图理解闭包,我以为我理解了它,直到我遇到以下解决方案:

我不明白这将如何提醒 0、1、2、3、4、5

var next = (function(){
var r = 0;
return function(){
return r++;
}

})()

for (var i = 0; i<=5; i++){
alert(next());
}

我明白第一次迭代是如何工作的,只有next,函数将执行并返回返回函数,然后next之后的额外()将执行返回的功能。我还了解到,由于 Closure,执行时的返回函数将可以访问变量 r。

但是我不明白在下一次迭代中,r 的状态将如何持续存在。在下一次 next() 再次运行时,r 变量将在函数范围内并且不会受到全局任何影响,这是怎么回事它知道 r 在前一个 next() 中的状态。即使是这样,var r = 0 不会将 r 重置为 0 吗?

最佳答案

外部 IIFE 仅运行一次,如末尾的 () 所示:

var next = (function(){
var r = 0;
return function(){
return r++;
}
})()
^^

因此,当解释器遇到 var next = ... 行时,IIFE 运行,创建 r 变量,然后返回以下函数:

function(){
return r++;
}

next 被分配给调用 IIFE 的结果,IIFE 返回该函数。因此,将来,当您调用 next 时,您将调用上面的(小)函数 - 调用 next 不会再次调用整个 IIFE,并且只有r 变量的任何一个绑定(bind)。

如果 next 是一个创建了 r未调用函数,你是对的,每次调用 next 将为 r 创建一个具有新绑定(bind)的新函数:

var next = function(){
var r = 0;
return function(){
return r++;
}
}

for (var i = 0; i<=5; i++){
var theFn = next();
console.log(theFn());
}

关于javascript - 闭包如何帮助函数了解前一个函数调用的私有(private)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52675773/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com