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

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

正在回答

2 回答

不明覺厲


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

這涉及到javascript中閉包,作用域,引用的概念。

// 這段代碼是錯誤的

// 每個星星節點的點擊事件

for(var i=0;i<5;i++){

? stars[i].onclick=function(){

? ? getStar(i);

? }

}


當前作用域總是能夠訪問外部作用域中的變量。

onclick函數總是能夠訪問到 window.onload 函數作用域中的變量i,

但是onclick函數沒有復制這個變量,只是引用了。


onload函數執行完后,其中的變量i沒有銷毀,因為onclick函數引用了,

但是這個時候循環已經執行完畢,i的值變成了5。


當onclick函數觸發執行時,獲取變量i的值時,自然取到的是5,而不是星星對應的序號。



解決辦法:復制一份。

// 每個星星節點的點擊事件

for(var i=0;i<5;i++){

!function(index) {

stars[index].onclick=function(){

getStar(index);

}

}(i);

}


利用自執行函數,將i作為參數傳入,index成為i的拷貝。

再把index放入onclick函數中即可。


更多關于閉包和作用域的知識,可參考javascript秘密花園文檔:

http://www.jb51.net/onlineread/JavaScript-Garden-CN/#function.closures


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

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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