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内部没有返回语句,因此在for循环中每次调用IIFE时都会有三个执行上下文堆叠在一起。
然后我假设在return arr;
中调用buildFunctions
时,那个IIFE的三个执行上下文被弹出的时间是正确的?