Javascript for-loop为链接赋值放置指针而不是变量的副本

时间:2013-02-10 22:36:27

标签: javascript pointers

这有多烦人? http://jsfiddle.net/b3xyx/

  • 我正在使用addEventListener为每个链接分配一个javascript函数。
  • 循环遍历每个链接,分配递增的变量x
  • 但实际上当您点击链接时 - 它会提醒x的值,而不是提醒x的最终值;即它刚刚分配了一个指向x的指针而不是复制它。
  • 在此处查看操作:http://jsfiddle.net/b3xyx/点击任意链接将提醒“4”。 GRR。

        function goToSite(where){
            alert("This would take you to " + where + ".com")
        }
    
        for(var x=1; x<=3; x++){
            document.getElementById('link'+x).addEventListener('click', function(){goToSite(x)})
        }
    

我该如何解决这个问题?在这种情况下,有没有办法创建变量的真实副本?


编辑:感谢您提出duplicate,但它似乎并不重复。

http://jsfiddle.net/aERRE/

^我的更新代码:

function goToSite(whichOne){
    return function(){
        alert("This would take you to " + whichOne + ".com");
    }
}

仍然无效。

1 个答案:

答案 0 :(得分:0)

在javascript中,for(var x ...)转换,var x移动到函数的开头。因此,goToSite中的x指的是每次迭代中增加的全局x,读取闭包以了解其发生的原因......