alert-1,而不是循环中各自的计数器

alert -1 instead of their respective counter inside of the loop?

本文关键字:计数器 循环 alert-1      更新时间:2024-04-28

为什么单击锚点时会提醒-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>

这是一个闭包问题:您在循环中定义的每个匿名函数都会读取for循环末尾的"i"值。

您需要另一个作用域,例如调用一个设置onclick处理程序的函数。

function add_onclick(el, i) {
    el.onclick = function() {
        alert(i);
        return false;
    }
}
var as = document.getElementsByTagName('a');
for ( var i = as.length; i--; ) {
    add_onclick(as[i],i);
}

实现与Keeper答案相同结果的另一种方法是为闭包使用函数表达式,您可以立即调用该表达式,使用您的值作为参数来创建闭包

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

这种方式需要最少的代码重构

您正在打印变量i的值。循环后,其值为-1