你为什么要封闭?

时间:2019-06-01 13:49:13

标签: javascript for-loop closures object-literal

如果省略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: ')
    }

0 个答案:

没有答案