Jquery 在$中创建的回调。每个fn和带有for循环的回调的行为是否不同?
全部 我做了一些测试代码,看起来像这样Jquery 在$中创建的回调。每个fn和带有for循环的回调的行为是否不同?,jquery,for-loop,each,Jquery,For Loop,Each,全部 我做了一些测试代码,看起来像这样 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;
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);
});
}
此外,如果我单击名为“elem2”的按钮,结果是:
console $
each function : 0
for loop : 3
console $
each function : 1
for loop : 3
两个循环示例之间发生了什么?请让我知道
谢谢,祝您愉快。
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);
}
for(变量i=0;i
在匿名函数中隐藏
i
可以做到这一点。添加$.fn。每个
为每次迭代创建一个新的执行上下文,以获得完整的答案。您可以在google中搜索javascript闭包
,了解原因和方法。搜索SO。复制品[太]多了。找到合适的副本后,请适当标记此问题,等等,汉克斯,我没听说什么是结束。我查一下。我很高兴理解这一点!谢谢你,唐月,pst和搅拌机