Javascript 警报-1而不是循环中各自的计数器?

Javascript 警报-1而不是循环中各自的计数器?,javascript,jscript,Javascript,Jscript,为什么单击锚定时,会提醒-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() {

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

var as=document.getElementsByTagName('a'); for(var i=as.length;i--;){ as[i].onclick=function(){ 警报(一); 返回false; } }
这是一个闭包问题:在循环中定义的每个匿名函数都会读取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);
}

这是一个闭包问题:在循环中定义的每个匿名函数都会读取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);
}

您正在打印变量
i
的值。循环之后,它的值是
-1

您正在打印变量
i
的值。循环结束后,它的值是
-1

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

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

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

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

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

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

@downvoter,请发表评论,这样我就可以用这个答案解决您的问题。@downvoter,请发表评论,这样我就可以用这个答案解决您的问题。这个问题来自在线编码测试,我敢肯定,让答案如此轻松地在谷歌上搜索是违背测试精神的。这个问题来自一个在线编码测试,我敢肯定让答案如此轻松地在谷歌上搜索是违背测试精神的。