gpt4 book ai didi

javascript - return 语句在这个闭包中起什么作用?

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

function buildFunctions(){
var arr = [];

for (var i = 0; i < 3; i++){
(function(j){
arr.push(function(){
console.log(j);
});
})(i);
}

return arr;
}

在上面的函数中,每次运行 for 循环时,都会为 IIFE 创建一个新的执行上下文(在 for 循环内部调用)。然后,在 IIFE 内部,它将把一个函数插入数组内部。下一次 for 循环运行时,它将再次创建一个新的执行上下文,以便再次调用 IIFE。

我的问题是第一次调用 IIFE 的执行上下文会发生什么?它仍然存在于内存中还是从执行堆栈中弹出?由于 IIFE 内部没有 return 语句,因此对于 for 循环中对 IIFE 的每次调用,将存在三个彼此叠置的执行上下文堆栈。

然后我假设当 return arr;buildFunctions 中调用时,IIFE 的这三个执行上下文弹出的时间正确吗?

最佳答案

这就是发生的事情:

当您执行var someVar = buildFunctions()时,它将向someVar分配一个由3个不同匿名函数组成的数组。

每个都有自己的上下文,其中 j 的值分别等于 0、1 和 2。

  • 如果您调用 someVar[0]();,它将输出 0
  • 如果您调用 someVar[1]();,它将输出 1
  • 如果您调用 someVar[2]();,它将输出 2

在这里,您可以在 chrome 控制台中看到数组和 someVar[0] 的闭包,其中 j = 0:

enter image description here

关于javascript - return 语句在这个闭包中起什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33322373/

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