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