麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

javascript自啟動函數的問題探討

2019-11-20 21:55:15
字體:
來源:轉載
供稿:網友
話不多說了。

先來看兩段代碼:
復制代碼 代碼如下:

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

for (var i = 0; i < elems.length; i++) {

alert(i);
elems[i].addEventListener('click', function (e) {
e.preventDefault();
alert('I am link #' + i);
}, 'false');
}

再看一面一段:
復制代碼 代碼如下:

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

for (var i = 0; i < elems.length; i++) {

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

HTML 代碼如下:
復制代碼 代碼如下:

<body>
<a href = "#">a</a>
<a href = "#">a</a>
<a href = "#">a</a>
<a href = "#">a</a>
<a href = "#">a</a>
<a href = "#">a</a>
<a href = "#">a</a>
<a href = "#">a</a>
</body>

你可以想像下,前后兩段 script代碼的效果。

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

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

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

看下面的代碼:
復制代碼 代碼如下:

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

for (var i = 0; i < elems.length; 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 elems = document.getElementsByTagName('a');

for (var i = 0; i < elems.length; i++) {

(function(index){
elems[i].addEventListener('click', function (e) {
e.preventDefault();
alert('I am link #' + index);
}, 'false');
})(i);
//而這里的則不一樣
//雖然循環結束后i 的值變成了8
//但是在封裝在閉包內的index 確實一直被locked 住的
//一直保存在內存中。
//準確的說 應該是整個函數都lock在內存中.

}

這里可能需要一些javascript閉包的知識。

以上代碼,想了很久,記錄下來,以防止忘記。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 高清做爰免费无遮网站挡 | 欧美一级不卡视频 | 成年人在线免费播放视频 | 黄色二区三区 | 久久精品亚洲一区 | 国产v综合v亚洲欧美久久 | 精品999www| 国产九九热 | 超碰人人做人人爱 | 最新中文字幕免费视频 | 久久精品中文字幕一区二区 | 99精品视频免费看 | 国产精品久久久久久久久久电影 | 亚洲国产精品一区二区精品 | 久久免费视屏 | 日韩视频中文 | 久久老司机精品视频 | 99精品视频久久精品视频 | 欧美黄色一级片视频 | 欧美性受xxxx人人本视频 | 91一级毛片 | 乱淫67194| 精品一区二区三区不卡 | 亚洲特黄| 久在线观看福利视频69 | 久久久中文 | 欧美在线观看视频网站 | 久久精品亚洲精品国产欧美kt∨ | av在线播放地址 | 福利在线免费视频 | 国产va在线观看 | 日韩在线播放第一页 | 久久经典国产视频 | 久久草草亚洲蜜桃臀 | 成人免费一区二区 | 99国产精品自拍 | 国产精品爱久久久久久久 | 少妇一级淫片免费放正片 | 欧美成人免费电影 | 亚洲无毛av | 日韩黄色片免费看 |