Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么变量只传递jQuery中for循环的第一个值?_Javascript_Jquery - Fatal编程技术网

Javascript 为什么变量只传递jQuery中for循环的第一个值?

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

ident的值在第一条注释处会发生变化,但在第二条注释处(在jQuery函数中),ident始终显示存储在
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']);
}