首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将JS变量的值(而不是引用)传递给函数?

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

Stack Overflow用户
提问于 2010-04-03 04:20:24
回答 3查看 46.2K关注 0票数 118

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

代码语言:javascript
复制
for (var i = 0; i < results.length; i++) {
    marker = results[i];
    google.maps.event.addListener(marker, 'click', function() { 
        change_selection(i);
    }); 
}

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

EN

回答 3

Stack Overflow用户

发布于 2010-04-03 06:19:35

除了闭包之外,您还可以使用function.bind

代码语言:javascript
复制
google.maps.event.addListener(marker, 'click', change_selection.bind(null, i));

调用时将i的值作为参数传递给函数。(null用于绑定this,在本例中不需要)。

原型框架引入了function.bind,并在ECMAScript第五版中进行了标准化。在浏览器都支持它之前,您可以使用闭包添加您自己的function.bind支持:

代码语言:javascript
复制
if (!('bind' in Function.prototype)) {
    Function.prototype.bind= function(owner) {
        var that= this;
        var args= Array.prototype.slice.call(arguments, 1);
        return function() {
            return that.apply(owner,
                args.length===0? arguments : arguments.length===0? args :
                args.concat(Array.prototype.slice.call(arguments, 0))
            );
        };
    };
}
票数 35
EN

Stack Overflow用户

发布于 2014-05-17 23:45:58

代码语言:javascript
复制
for (var i = 0; i < results.length; i++) {
    marker = results[i];
    google.maps.event.addListener(marker, 'click', (function(i) {
        return function(){
            change_selection(i);
        }
    })(i)); 
}
票数 -2
EN

Stack Overflow用户

发布于 2012-06-07 01:20:57

我想我们可以定义一个临时变量来存储i的值。

代码语言:javascript
复制
for (var i = 0; i < results.length; i++) {
 var marker = results[i];
 var j = i;
 google.maps.event.addListener(marker, 'click', function() { 
   change_selection(j);
 }); 
}

不过我还没有测试过它。

票数 -4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2568966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档