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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

問一個JavaScript里弱弱的閉包的問題

問一個JavaScript里弱弱的閉包的問題

當年話下 2018-08-05 11:09:53
   不是很理解點擊事件的觸發過程。。。  在外層for語句i=10,當進入內部函數的時候,i++,由于作用域,內部函數可以調用作用域鏈上外部的變量,所以內層輸出為11。  但外層輸出了i=1/2/3/4/5/6/7/8/9/10,我的疑惑是比如當點擊第二個按鈕的時候,外層的i已經循環到10了,按這種思路來說,是直接會觸發:document.getElementById("id10").onclick = function (){},意思是只有第10個按鈕才會觸發。。第二個按鈕為什么會觸發onclick事件呢..之前看到了外層會輸出i=1/2/3/4/5/6/7/8/9/10,意思是都會觸發嗎?能不能這樣理解:點擊第二個按鈕的時候,i=2,document.getElementById("id2").onclick = function (){},被觸發的時候,但是for循環不會停止,當判斷條件不為false的時候,則i=11也會傳入document.getElementById("id2").onclick = function (){}內部函數里,然后由于先后順序,i=11會覆蓋掉之前的i=2的賦值,最后輸出11。。。是這樣理解的嗎??像下面(這樣的話,就只會輸出一個值,而且只有當點擊第五個按鈕的時候):對原理和順序不是很了解。。。求解答。。萬分感謝
查看完整描述

1 回答

?
莫回無

TA貢獻1865條經驗 獲得超7個贊

1) js沒有塊級作用域,只有函數作用域;也就是說for循環中聲明的變量的作用域不在for循環塊中,其中聲明的變量的作用域為其所在的函數或全局作用域
2) js函數中變量作用域是在函數聲明的時候確定-詞法作用域,也就是在函數聲明的時候就確定函數中使用到的變量去哪里尋找
3)

for (var i = 1; i <= 10; i++)
{   console.log(i);//10
   document.getElementById("id"+i).onclick = function (){       console.log(i); 
        alert(i);
    }  
}

for循環每次執行為對一個的DOM元素綁定了一個click事件回調函數,而這個綁定的匿名函數不會在for循環執行的時候執行,等到對應DOM元素上的click事件發生后才被執行
4) click匿名函數聲明時,就確定函數中使用到的變量i在其所在函數的外層函數或全局作用域中
5)當click匿名函數執行時-click事件發生,i變量的值就為for循環結束后的值,為11


查看完整回答
反對 回復 2018-09-17
  • 1 回答
  • 0 關注
  • 556 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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