Javascript 为什么变量只传递jQuery中for循环的第一个值?
ident的值在第一条注释处会发生变化,但在第二条注释处(在jQuery函数中),ident始终显示存储在Javascript 为什么变量只传递jQuery中for循环的第一个值?,javascript,jquery,Javascript,Jquery,ident的值在第一条注释处会发生变化,但在第二条注释处(在jQuery函数中),ident始终显示存储在arr[0]['ident']处的值 代码: 用于(i=0;iJavaScript有函数作用域,而不是块作用域。您可以在循环中使用var ident,但这并不意味着您实际上在创建一个新变量ident;函数中只有一个ident。在循环中创建/绑定的所有函数都共享对该标识变量 当任何事件处理程序运行时,ident已被重复重置为新值,直到最后一次迭代时,它将被设置为arr[arr.length-1
arr[0]['ident']
处的值
代码:
用于(i=0;iJavaScript有函数作用域,而不是块作用域。您可以在循环中使用var ident
,但这并不意味着您实际上在创建一个新变量ident
;函数中只有一个ident
。在循环中创建/绑定的所有函数都共享对该标识
变量
当任何事件处理程序运行时,ident
已被重复重置为新值,直到最后一次迭代时,它将被设置为arr[arr.length-1]['ident']
。每个事件处理函数对ident
都具有相同的值,因为它们都共享对相同ident
变量的引用
要解决此问题,您需要为每个函数传递其自己的变量以关闭,通常通过以下方式完成:
for(i=0;i解释得更详细一点?实际上我正试图找到一个合适的副本来关闭它this@meagar我找不到。是的,请解释。这没有意义。@ChrisRockGM看到我的更新,也没问题,但我如何修复它?
for (i=0;i<arr.length;i++)
{
var ident = arr[i]['ident'];
console.log(ident+' ');
$(document).on('click','#'+ident, function() {
console.log('over'+ident+' ');
});
}
for (i=0;i<arr.length;i++)
{
(function (ident) {
console.log(ident+' ');
$(document).on('click','#'+ident, function() {
console.log('over'+ident+' ');
});
})(arr[i]['ident']);
}