首頁  >  文章  >  web前端  >  JavaScript 中的匿名函數什麼時候會變成閉包?

JavaScript 中的匿名函數什麼時候會變成閉包?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-31 08:05:02971瀏覽

When Does an Anonymous Function Become a Closure in JavaScript?

JavaScript 閉包與匿名函數

匿名函數是 JavaScript 中常見的功能,經常出現在閉包的討論中。然而,並非所有匿名函數都有資格成為真正的閉包。

定義閉包

JavaScript 中的閉包是一種特殊類型的匿名函數,它保留對即使外部作用域結束後,它仍然被創建。此函數允許閉包從外部作用域「捕獲」變數的值,防止它們被垃圾收集。

案例研究:關閉變數

中在給定的程式碼範例中,兩種解都使用匿名函數來延遲計數器變數 i 的列印。

朋友的嘗試

第一個範例中的程式碼似乎捕捉了i 閉包內的變數。但是,它不滿足閉包的定義,因為內部匿名函數 g 不繼承外部函數 f 的詞法作用域。因此, i 實際上並不是「閉合」。

<code class="javascript">for(var i = 0; i < 10; i++) {
    (function(){
        var i2 = i;
        setTimeout(function(){
            console.log(i2);
        }, 1000)
    })();
}</code>

編輯的嘗試

第二個程式碼範例真正建立了一個閉包。外部函數 f 傳回的匿名函數會捕獲 i2 變數並將其值保留在閉包的詞法範圍內。然後在 setTimeout 回呼中呼叫這個閉包,確保存取 i 變數的原始值。

<code class="javascript">for(var i = 0; i < 10; i++) {
    setTimeout((function(i2){
        return function() {
            console.log(i2);
        }
    })(i), 1000);
}</code>

結論

在提供的程式碼中,編輯器的解決方案示範如何正確使用閉包來捕捉 i 變數的值。雖然這兩種方案都有效解決了延遲列印的問題,但只有小編的方案才算是技術意義上的閉包。

以上是JavaScript 中的匿名函數什麼時候會變成閉包?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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