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