Javascript"for loop"变量指针

Mic*_*tes 1 javascript

我确信我还没有足够的咖啡看清楚,这看起来微不足道,但是,我有一个for循环,它传递了jQuery插件中的一些函数.var i被传递,当然,传递i的最后一个值,而不是传递时分配的值.

for (var i = 1; i < 3 + 1; i++) {
    $('#div' + i).plugin({ // i returns correctly here
    onDelete: function () {
            alert("Deleting #" + i); // i returns 4 every time - last value of i
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

我如何"复制"我,所以它按照我的期望返回?我有一个解决方法,但我很想知道,所以我可以把头放在沙子里.

0x4*_*2D2 6

这是众所周知的循环问题.你必须每次将它包装在一个闭包中:

for (var i = 1; i < 4; i++)(function(i) {
    $('#div' + i).plugin({
        onDelete: function() {
            alert("Deleting #" + i);
        }
    });
})(i);
Run Code Online (Sandbox Code Playgroud)

或者您可以使用此:

for (var i = 1; i < 4; i++) {
    $('#div' + i).plugin({
        onDelete: callback(i)
    });
};

function callback(i) {
    return function() {
        alert("Deleting #" + i);
    };
}
Run Code Online (Sandbox Code Playgroud)