为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕哥9229398 2019-07-13 09:32:50
下面是我正在尝试运行的一个简化版本:for (var i = 0; i < results.length; i++) {     marker = results[i];     google.maps.event.addListener(marker, 'click', function() {          change_selection(i);     }); }但是,我发现每个侦听器都使用结果长度的值(for循环结束时的值)。如何添加监听器,使每个侦听器在我添加时使用i的值,而不是使用对i的引用?
查看完整描述

3 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

在现代浏览器中,可以使用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);}

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


查看完整回答
反对 回复 2019-07-13
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

关闭:

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

这些现在通常被称为生命


查看完整回答
反对 回复 2019-07-13
  • 3 回答
  • 0 关注
  • 1099 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信