请问在JS脚本中程序的执行顺序

来源:10-1 编程挑战

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没多久,还请大家指点一下!!

写回答 关注

2回答

  • Tracy_
    2014-12-14 11:03:01
    已采纳

    这个不是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)
                     }
                 }
             }

    仔细看看,也许对你有启发。


    雨情雾语

    方法2中的 alert(i)不对吧,是不是应该是alert(this.index);

    2014-12-22 17:08:24

    共 2 条回复 >

  • 雨情雾语
    2014-12-23 13:35:20

    http://www.jb51.net/article/24101.htm 这篇帖子,理解一下闭包

JavaScript进阶篇

本课程从如何插入JS代码开始,带您进入网页动态交互世界

468061 学习 · 21891 问题

查看课程

相似问题