如何复制在javascript参考的价值?
-
12-09-2019 - |
题
我前一段时间发布了关于的问题是什么问题应了良好的JavaScript编码器能够回答。 MEDER指出以下问题:
以下代码使任何“一个”元素的点击以提醒(-1)由于以下事实:“i”是保持在onclick函数作为参考,而不是作为一个值:
<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>
的问题是:如何解决此 实施,使的onclick 函数持有i的值,而不是 它的参考?
我不知道答案。如何解决呢?如何使我为基准值的副本,而不是实际的参考?
侧问题:传递作为一个参考的所有变量类型?或者它它是否是一个primitity类型或对象变化?
任何想法,将不胜感激。
解决方案
要理解这个问题,你一定要学会什么的关闭是。然后还必须知道与范围如何JavaScript的交易(它是功能的基础上,而不是块的基础为C例如上)。
这里的 “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>
另一个版本,做的究竟的同样的事情,但可能会更容易理解,如果你不习惯在JS关闭和范围是:
for ( var i = as.length; i--; ) {
as[i].onclick = (function(number) {
return function() {
alert(number);
return false;
}
})(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>
可能?
不隶属于 StackOverflow