今天有位同學(xué)遇到了一個(gè)關(guān)于循環(huán)內(nèi)綁定對(duì)象事件奇怪的問題,通過我在 Google上搜索后得到這是由于沒有對(duì)js級(jí)別變量完全理解所產(chǎn)生的問題。所以我覺得很有必要把這方面的知識(shí)記錄下來,避免再發(fā)生這樣的錯(cuò)誤。
同學(xué)的編碼如下:

2

3

4



5

6

7

8

9



10

11

12

13

14

15



16

17

18

19

20

這時(shí)奇怪的問題就出現(xiàn)了,點(diǎn)擊這三個(gè)圖片中的任何一個(gè),彈出的數(shù)值都是4(也就是循環(huán)結(jié)束后的值)。按我們正常的理解應(yīng)該給每個(gè)圖片點(diǎn)擊時(shí)間中傳入的參數(shù)按順序來因該是1,2,3。
下面我就來談?wù)勎医鉀Q這個(gè)問題的過程
1.考慮到每回點(diǎn)擊顯示的都是i這個(gè)變量循環(huán)結(jié)束后的值,所以這個(gè)i變量的范圍一定不只限于循環(huán)內(nèi),于是我在循環(huán)后面加入了alert(i)這條語句發(fā)現(xiàn)打印出來的是i而不是undefined.由此我們可以斷定i是全局變量。
2.第二步我寫了下面代碼

2

3

4

5



6

7

8

9



10

11

12

13

14

15

16

通過這段代碼我們發(fā)現(xiàn),只要重復(fù)點(diǎn)擊任何一個(gè)按鈕都會(huì)從1開始逐漸增加,由此我們可以確認(rèn)在onclick函數(shù)中沒有執(zhí)行k++,而是在觸發(fā)了onclick時(shí)間才會(huì)執(zhí)行k++.
3.由上面我得到的結(jié)論傳給onclick函數(shù)內(nèi)的是變量引用,于是我寫了下面的代碼,才最終解決了問題

2

3

4



5



6

7

8

9



10

11

12

13

14

15

16

17
