我前一段时间发布了关于的问题是什么问题应了良好的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>

可能?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top