gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:52:20 26 4
gpt4 key购买 nike

前段时间我发布了一个关于 what questions should a good javascript coder be able to answer 的问题. Meder 指出了以下问题:

由于“i”作为引用而不是值保留在 onclick 函数中,因此以下代码会点击任何“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>

The question is: How to fix this implementation so that the onclick function holds the value of i and not it's reference?

我不知道答案。如何解决?如何让 i 成为引用值的副本而不是实际引用?

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

如有任何想法,我们将不胜感激。

最佳答案

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

这是“标准”解决方案:

<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>

另一个版本完全做同样的事情,但如果您不习惯 JS 中的闭包和作用域,可能更容易理解:

for ( var i = as.length; i--; ) {
as[i].onclick = (function(number) {
return function() {
alert(number);
return false;
}
})(i);

明白了吗?

关于javascript - 如何在javascript中复制引用的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1844262/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com