首頁 > web前端 > js教程 > javascript自啟動函數的問題探討_javascript技巧

javascript自啟動函數的問題探討_javascript技巧

WBOY
發布: 2016-05-16 17:20:41
原創
1324 人瀏覽過

話不多說了。

先來看兩段程式碼:

複製程式碼 程式碼如下:





>var elems = document.getElementsByTagName('a');

for (var i = 0; i
alert(i);
elemsms [i].addEventListener('click', function (e) {
e.preventDefault();
alert('I am link #' i);
}, 'false');
} 複製程式碼


程式碼如下:



程式碼如下:



程式碼如下:


程式碼如下:
程式碼如下: 程式碼如下:
var elems = document.getElementsByTagName('a');

for (var i = 0; i
(function(index){
elems[i].addEventListener('click', function (e) {
e.preventDefault();
alert('I am link #' index);
}, 'false' );
})(i);
}

HTML 代碼如下:




複製代碼


程式碼如下:

a a a a a a
a
a



你可以想像下,前後兩段script程式碼的效果。

如果你能看出來效果的區別,那麼恭喜你。至少我思考了很久,才明白裡面的玄妙。

是的。你沒有看錯,這裡的第一段程式碼,無論你點擊哪一個鏈接,輸出的都是I am link # 8.

第二段程式碼,才是你真正想要的結果,那麼為什麼呢。

看下面的程式碼:




複製程式碼

程式碼如下:
程式碼如下: var🎜> elems = document.getElementsByTagName('a');
for (var i = 0; i
alert(i);
elems[i ].addEventListener('click', function (e) {
e.preventDefault();
alert('I am link #' i);
//注意這裡的回呼函數只有的觸發的時候才會啟動
//一樣,這裡的i的值也一樣在循環結束的時候也變化了
}, 'false');

//原因在於
/ /這裡的elems[i] 雖然是引用的元素
//但是回調函數中的i 已經在循環結束後
//變成了8(如果elems 的長度是8 的話)
}





複製代碼
代碼如下: 代碼如下: var ('a'); for (var i = 0; i (function(index){ elems[i].addEventListener( 'click', function (e) { e.preventDefault(); alert('I am link #' index); }, 'false'); })(i) ; //而這裡的則不一樣//雖然循環結束後i 的值變成了8 //但是在封裝在閉包內的index 確實一直被locked 住的//一直保存在記憶體中。 //準確的說 應該是整個函數都lock在內存中. } 這裡可能需要一些javascript閉包的知識。 以上程式碼,想了很久,記錄下來,以防止忘記。
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板