如果省略obj并将函数推入数组,则闭包将在for循环的执行上下文结束后显示,并在以后执行数组中的函数。
在for循环的执行上下文结束之后,此处的代码将得出i的适当值。这将我对闭包的理解带到了测试中,我不太确定如何解释发生了什么。
我的另一个问题是,如何像现在这样对inner()进行键控,以使其成为可以稍后执行的对象中的值,通过仅保留i的最终值来保留闭包。 for循环已退出?
var myArray = new Array;
for (let i = 0; i < 4; i++) {
var obj = {[i]: function inner(){console.log(i)}}
myArray.push(
obj
// when obj is omitted and the function is pushed to the array in the global context, the closure manifests, but how to key it as a value in an object that can later be executed?
// function inner(){console.log(i);
);
}
console.log(myArray)
try {
console.log(myArray[0])
myArray[0][0]();
myArray[1][1]();
// myArray[2][2]();
// myArray[3][3]();
// myArray[4][4]();
// myArray[5][5]();
for (let i = 0; i < myArray.length; i++) {
myArray[i][i]();
}
} catch(e) {
console.log('caught: ' + e)
//return;
} finally {
console.log('finally: ')
}