亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

請問在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沒多久,還請大家指點一下??!

正在回答

2 回答

這個不是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 回復 有任何疑惑可以回復我~

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

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

舉報

0/150
提交
取消
JavaScript進階篇
  • 參與學習       468969    人
  • 解答問題       22582    個

本課程從如何插入JS代碼開始,帶您進入網頁動態交互世界

進入課程

請問在JS腳本中程序的執行順序

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號