如何在javascript中复制引用的值?
不久前,我发布了一个关于的问题。梅德尔指出了以下问题: 由于onclick函数中的“i”是作为引用而不是值保存的,因此以下代码单击任何“a”元素以发出警报(-1):如何在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--; )
<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);