javascript - 为什么传递给 for 循环内的函数的 'i' 等于大于 'i' 的数字?

标签 javascript arrays for-loop

我有这个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/

相关文章:

java - 等待声音结束后再继续

c - 我的 for 循环响应不正确

javascript - jQuery - 我可以测试一个项目是隐藏还是显示吗?

javascript - Node.js 返回文件结果

javascript - REACT 待办事项列表 : How to check if an item already exist in the array

javascript - console.log() 打印输出函数

javascript - 如何过滤 native react 中的对象数组?

java - Java 数组质因数分解

java - 交换二维数组中的两个元素

python - 使用 Python Openpyxl 和 For 循环连接 Excel 中的两个单元格