您的位置:首页 > Web前端 > JavaScript

javascript for循环中的闭包

2012-09-21 19:54 435 查看
<a href="#">link1</a> <a href="#">link2</a> <a href="#">link3</a>
<script>

function main(links) {
for (var i=0; i<links.length; i++) {
links[i].onclick = function() {
alert(i+1);
}
}
};
main(document.getElementsByTagName("a"));

</script>


注意我们的links.length为3;0 1 2

可是实际运行时点击任何一个链接都是 4.

为什么?

为当闭包函数被调用时,他引用的是最后一次的赋值

解决办法:

links[i].onclick=(function(j){
return function(){
alert(j+1);
}
})(i);

}


用一个匿名函数来激发作用域:

(function(){
var tmp=i;
links[i].onclick=function(){
alert(tmp+1);
};
})();


还有很多的解决办法:

/article/4664144.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: