<!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 这篇帖子,理解一下闭包