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

这是我尝试运行的内容的简化版本:

for (var i = 0; i < results.length; i++) {

marker = results[i];

google.maps.event.addListener(marker, 'click', function() {

change_selection(i);

});

}

但是我发现每个侦听器都使用result.length的值(for循环终止时的值)。如何添加侦听器,以使每个侦听器在添加i时都使用i的值,而不是对i的引用?

回答:

在现代浏览器中,您可以使用letconst关键字创建一个块作用域变量:

for (let i = 0; i < results.length; i++) {

let marker = results[i];

google.maps.event.addListener(marker, 'click', () => change_selection(i));

}


在较旧的浏览器中,您需要创建一个单独的作用域,通过将其作为函数参数传递来将变量保存为当前状态:

for (var i = 0; i < results.length; i++) {

(function (i) {

marker = results[i];

google.maps.event.addListener(marker, 'click', function() {

change_selection(i);

});

})(i);

}

通过创建一个匿名函数并以变量作为第一个参数调用它,您将按值传递给函数并创建一个闭包。

以上是 如何将JS变量的值(而不是引用)传递给函数?[重复] 的全部内容, 来源链接: utcz.com/qa/399265.html

回到顶部