猿问

如何将JS变量的值(而不是引用)传递给函数?

下面是我正在尝试运行的一个简化版本:

for (var i = 0; i < results.length; i++) {
    marker = results[i];
    google.maps.event.addListener(marker, 'click', function() { 
        change_selection(i);
    }); }

但是,我发现每个侦听器都使用结果长度的值(for循环结束时的值)。如何添加监听器,使每个侦听器在我添加时使用i的值,而不是使用对i的引用?


慕哥9229398
浏览 1100回答 3
3回答

繁华开满天机

在现代浏览器中,可以使用let或const创建块作用域变量的关键字:for&nbsp;(let&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;results.length;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;let&nbsp;marker&nbsp;=&nbsp;results[i]; &nbsp;&nbsp;google.maps.event.addListener(marker,&nbsp;'click',&nbsp;()&nbsp;=>&nbsp;change_selection(i));}在较旧的浏览器中,需要创建一个单独的作用域,通过将变量作为函数参数传递给它,从而将变量保存在当前状态:for&nbsp;(var&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;results.length;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;(function&nbsp;(i)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;marker&nbsp;=&nbsp;results[i]; &nbsp;&nbsp;&nbsp;&nbsp;google.maps.event.addListener(marker,&nbsp;'click',&nbsp;function()&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;change_selection(i); &nbsp;&nbsp;&nbsp;&nbsp;});&nbsp; &nbsp;&nbsp;})(i);}通过创建一个匿名函数并使用变量作为第一个参数调用它,您将按值传递给该函数并创建一个闭包。

素胚勾勒不出你

关闭:for&nbsp;(var&nbsp;i&nbsp;=&nbsp;0,&nbsp;l=&nbsp;results.length;&nbsp;i&nbsp;<&nbsp;l;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;marker&nbsp;=&nbsp;results[i]; &nbsp;&nbsp;&nbsp;&nbsp;(function(index){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;google.maps.event.addListener(marker,&nbsp;'click',&nbsp;function()&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;change_selection(index); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;})(i);}这些现在通常被称为生命
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答