首頁 >web前端 >js教程 >為什麼我的所有點擊處理程序都會回傳「Link 5」?

為什麼我的所有點擊處理程序都會回傳「Link 5」?

DDD
DDD原創
2024-12-27 10:47:13197瀏覽

Why Do All My Click Handlers Return

Javascript 臭名昭著的循環問題:閉包揭開了魔法

當程式碼片段嘗試建立連結集合時,就會出現臭名昭著的循環問題獨特的點擊處理程序。然而,每次點擊都會註冊為“連結 5”,施展令人困惑的咒語。

閉包:神秘的巫師

謎底在於 JavaScript 的範圍,一個領域界限通過功能,而不是塊。閉包,蒙面的巫師,將封閉的範圍困在他們的掌握之中。

有缺陷的循環

在錯誤的循環中,變數「i」被限制在函數內,被關在封閉式監獄中​​。當循環完成時,“i”變成“5”,在倒霉的處理程序中留下幽靈般的印記。

救世主循環

一線希望出現在第二個循環。每次迭代都會產生一個獨立的函數對象,每個對像都守護著自己的哨兵「num」。這種印記可以抵抗時間的突變,保護處理者免受「5」的陰險咒語的影響。

最佳化的三位一體

雖然封閉刺激了這種神奇的轉變,但它需要高昂的價格-每個連結兩個新的函數物件。利用 DOM 的秘密知識可以產生更優雅的解決方案。透過將資料直接儲存在節點上,我們可以召喚出與不同記憶的鏈接,從而擺脫了外部範圍的暴政。

奧術長生不老藥

真正的魅力在於這部分代碼:

function linkListener() {
    alert(this.i);
}

function addLinks() {
    for(var i = 0; i < 5; ++i) {
        var link = document.createElement('a');
        link.appendChild(document.createTextNode('Link ' + i));
        link.i = i;
        link.onclick = linkListener;
        document.body.appendChild(link);
    }
}

每個連結都有自己的「i」 ,將其獨特的身份融入點擊的誘惑中。閉合的魔法現在被精確運用,施展神奇的咒語,使連結能夠回憶起自己的命運。

以上是為什麼我的所有點擊處理程序都會回傳「Link 5」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn