Javascript将计数器传递给函数

时间:2017-08-22 20:20:04

标签: javascript

我知道闭包是如何工作的,但对我来说并不是很清楚。 下面的代码片段如何在引擎盖下工作(输出' 0):

function fillFunctionArr() {
    let arr = [];
    for (var i = 0; i < 10; i++) {
        arr[i] = {
            inner: i,
            innerFunc: function() {
                console.log(this.inner)
            }
        }
    }
    return arr;
}

var ex = fillFunctionArr();
ex[0].innerFunc()

当然,如果它被声明为:

    arr[i] = {
        // inner: i,
        innerFunc: function() {
            console.log(i)
        }
    }

输出为10。 为什么第一个片段比下面的片段更可取:

function fillFunctionArr() {
let arr = [];
for (var i = 0; i < 10; i++) {
    arr[i] = (function(qnt) {
        return function() {
            console.log(qnt)
        }
    })(i);
}
return arr;
}

var ex = fillFunctionArr();
ex[0]()

1 个答案:

答案 0 :(得分:0)

没有“优选”的选择。选择取决于您想要扩展的外部代码的逻辑。两者都在循环迭代时立即初始化。这只是JS灵活性的一个优势。