如何在javascript中复制引用的值?

如何在javascript中复制引用的值?,javascript,pass-by-reference,pass-by-value,Javascript,Pass By Reference,Pass By Value,不久前,我发布了一个关于的问题。梅德尔指出了以下问题: 由于onclick函数中的“i”是作为引用而不是值保存的,因此以下代码单击任何“a”元素以发出警报(-1): <a href="#">text</a><br><a href="#">link</a> <script> var as = document.getElementsByTagName('a'); for ( var i = as.length; i--; )

不久前,我发布了一个关于的问题。梅德尔指出了以下问题:

由于onclick函数中的“i”是作为引用而不是值保存的,因此以下代码单击任何“a”元素以发出警报(-1):

<a href="#">text</a><br><a href="#">link</a>
<script>
var as = document.getElementsByTagName('a');
for ( var i = as.length; i--; ) {
    as[i].onclick = function() {
        alert(i);
        return false;
    }
}
</script>

var as=document.getElementsByTagName('a'); for(var i=as.length;i--;){ as[i].onclick=function(){ 警报(一); 返回false; } }
问题是:如何解决这个问题 实现使onclick 函数保存i的值,而不是 是参考资料吗

我不知道答案。如何修复它?如何使i成为参考值的副本而不是实际参考值

附带问题:是否所有变量类型都作为引用传入?或者它是原始类型还是对象而有所不同

任何想法都将不胜感激。


<a href="#">text</a><br><a href="#">link</a>
<script>
var as = document.getElementsByTagName('a');
for ( var i = as.length; i--; ) {
    as[i].onclick = function() {
        return function() {
           alert(i);
           return false;
        }
    }();
}
</script>
var as=document.getElementsByTagName('a'); for(var i=as.length;i--;){ as[i].onclick=function(){ 返回函数(){ 警报(一); 返回false; } }(); }

也许吧?

要理解这个问题,您必须了解什么是闭包。然后您还必须知道javascript是如何处理作用域的(例如,它是基于函数的,而不是基于块的)

以下是“stantard”解决方案:

<a href="#">text</a><br><a href="#">link</a>
<script type="text/javascript">
var as = document.getElementsByTagName('a');
for ( var i = as.length; i--; ) {
    as[i].onclick = (function(i) {
        return function() {
            alert(i);
            return false;
        }
    })(i);
}
</script>

明白了吗?

这是最常见的问题之一,请检查我的回答并在这个问题上发表评论:你就快到了。。。提示:您必须捕获
i
变量,方法是将其作为参数传递给自执行函数。。。
for ( var i = as.length; i--; ) {
    as[i].onclick = (function(number) {
        return function() {
            alert(number);
            return false;
        }
    })(i);