2

我做了一些看起来像这样的测试代码。

var selects = [$('#elem1'), $('#elem2'), $('#elem3')];

$.each(selects, function(item){
    selects[item].bind('click', function(){
        console.log("each function : " + item);
    });
});

for(var i = 0; i < selects.length; i++){
    var elem = selects[i];
    elem.bind('click', function(e){
        console.log("for loop : " + i);
    });
}

我做了三个按钮来绑定事件。并经过测试

如果我单击名称为“elem1”的按钮,结果是:

console $
each function : 0
for loop : 3

如果我单击名称为“elem2”的按钮,结果是:

console $
each function : 1
for loop : 3

两个循环示例之间发生了什么?请告诉我。

感谢您有一个愉快的一天。

4

1 回答 1

0

i指的是计数器变量本身,而不是它的值。您必须按值传递它:

for(var i = 0; i < selects.length; i++){
    var elem = selects[i];

    (function(i) {
        elem.bind('click', function(e) {
            console.log("for loop : " + i);
        });
    })(i);
}

i匿名函数中的影子可以做到这一点。

于 2013-03-19T02:25:16.043 回答