lsolal
2014-12-13 20:41
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<script type="text/javascript">
window.onload = function(){
var div=document.getElementsByTagName("div");
for(var i= 0;i<div.length;i++){
div[i].onclick= function() {
document.write(i);
}
alert(i);
}
}
</script>
</head>
<body>
<div>好的1</div>
<div>好的2</div>
<div>好的3</div>
<div>好的4</div>
<div>好的5</div>
</body>
</html>在我点击这几个DIV的时候,i的值都是5,for循环是先执行完了吗?难道不是程序执行到onclick这里就等着,等我点击了再继续执行吗?我才开始学JS没多久,还请大家指点一下!!
这个不是js执行顺序的问题而是典型的闭包问题。
涉及的内容比较多,需要看的内容比较多,一时半会儿解释不清。主要是作用域链的问题,建议你百度搜一下相关知识,不然我给你讲也讲不明白。
我给你提供几个解决方案吧:
//方法1
window.onload = function(){
var div=document.getElementsByTagName("div");
for(var i= 0;i<div.length;i++){
div[i].onclick= function(num) {
return function(){
alert(num);
}
}(i)
}
}
//方法2
window.onload = function(){
var div=document.getElementsByTagName("div");
for(var i= 0;i<div.length;i++){
div[i].index = i;
div[i].onclick= function() {
alert(i)
}
}
}仔细看看,也许对你有启发。
http://www.jb51.net/article/24101.htm 这篇帖子,理解一下闭包
JavaScript进阶篇
469185 学习 · 22584 问题
相似问题