【发布时间】:2016-01-24 04:08:30
【问题描述】:
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 的执行上下文被弹出正确的时间?
【问题讨论】:
标签: javascript