为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

正在回答

3 回答

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

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


1 回复 有任何疑惑可以回复我~
#1

lsolal 提问者

非常感谢!
2014-12-15 回复 有任何疑惑可以回复我~
#2

雨情雾语

方法2中的 alert(i)不对吧,是不是应该是alert(this.index);
2014-12-22 回复 有任何疑惑可以回复我~

else是否则后面括号里是条件条件肯定要用if连

uqcblym

0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
JavaScript进阶篇
  • 参与学习       467126    人
  • 解答问题       21874    个

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

进入课程

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信