gpt4 book ai didi

javascript - 在同一函数作用域的不同版本上具有闭包的函数

转载 作者:行者123 更新时间:2023-12-03 01:59:59 24 4
gpt4 key购买 nike

考虑这段代码:

function foo(a){
setTimeout(function(){
debugger;
a;
}, 1000);
}

foo(1);
foo(2);
foo(3);

发生的情况是,每个函数调用在调用其相对的 setTimeout 函数时都会获得正确的 a 值,因此这在某种程度上意味着每个传递的回调函数在 foo 函数的作用域上都有一个闭包,但每个函数都有一个该闭包的快照范围在某个时间点,但我无法理解这个解释,或者我首先错过了范围的含义,有人可以详细说明吗?谢谢。

最佳答案

闭包基本上只是一个函数引用,与对封闭范围记录的引用绑定(bind)在一起。所以在你的情况下:

  setTimeout(function(){

这就是被关闭的函数,它执行的作用域是 foo 当前执行的中间作用域记录。当您调用时:

  foo(1)

创建一个新的范围记录,其中a1,通常当foo完成执行时该记录将被丢弃,但由于闭包保留了对它的引用,这不会发生。现在,当超时结束时,闭包将被执行,并且对闭包的引用将丢失,因此对封闭范围记录的引用也会丢失,并且 a 最终被垃圾收集。当您多次调用 foo 时,会创建多个记录和闭包,因此 a 可以在回调中计算出不同的值,因为它们被解析为不同的记录。

关于javascript - 在同一函数作用域的不同版本上具有闭包的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50080318/

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