我有这个for循环:
for (var i = 1; i < array.length; i++) {
$('#shop'+i).on('click', function(){ buyThis(i) });
}
问题是作为参数传递给 buyThis() 的 i 不等于 i。
array.length 等于 3,并且创建了 #shop1 和 #shop2,但参数传递给 buyThis() 是3。为什么呢? 我正在尝试获取一个事件,其中单击 #shop1 会触发 buyThis(1),单击 #shop2 会触发 buyThis(2)。
最佳答案
这是因为当循环完成并且变量 i
达到其最终值时,函数内的代码会稍后被调用。
您可以将设置事件的代码包装在立即调用的函数表达式 (IIFE) 中,以便为循环的每次迭代创建一个变量:
for (var i = 1; i < array.length; i++) {
(function(i){
$('#shop' + i).on('click', function(){ buyThis(i); });
})(i);
}
关于javascript - 为什么传递给 for 循环内的函数的 'i' 等于大于 'i' 的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31952367/