JS中迴圈和閉包如何理解?

時間 2021-06-02 19:25:48

1樓:鹽麵包

啟動了 1-5 的迴圈,每次都通過呼叫 setTimeout 建立乙個定時器。

首次迴圈的 i = 1,那麼延遲為 1 * 1000 = 1 秒。第二次及之後的延遲也就是 2, 3 ... i * 1000 秒。

此時迴圈已經跑完,建立好了所有的定時器,i 最終值為 6。

定時器觸發時,輸出了變數 i 也就是 6 了。

2樓:哦嚯

在此for迴圈中的使用了乙個setTimeout定時器,每次這個定時器函式執行的時候在找尋那個i的時候,因為在定時器函式裡面沒有申明i這個變數,所以會在函式外面去找這個i,那麼這個i就是for迴圈中的i,所以一般這種情況,我們都用乙個自執行函式傳入i用來儲存這個i形成閉包。所以一般都這樣寫

for ( var i = 1; i <= 5; i++ ), i * 1000);})(i)

}至於為什麼不是每隔6s,是因為在settimeout函式後面作為時間引數的並沒有建立新的作用域,是屬於直接執行了你這個定時器函式。和閉包沒有關係。只有函式才能建立新的作用域

在 JS 中閉包為什麼叫 閉包 ,而不用其它名稱命名?

西門吹牛 這個問題的最終解釋權,需要找這個語法的作者了。哈哈,我覺得關注MDN中對其的定義及解釋,比樓主的問題更有價值 Closures tearshark 第一,沒必要用別的名字。咱又不是搞地下工作的,沒必要整一些暗號一樣的詞彙來干擾試聽。第二,closure和lambda表現上功能很接近。大部分...

到底該如何理解閉包?

Hong 簡單概括如下 閉包 closure 是對JS中變數取值機制行為的一種描述,就像是對作用域的一種閉合 closing 在函式定義的時候,其作用域已經決定了,並且後續使用不會再改變,即作用域已經閉合了。 寒酸的中年男子 第一次回答問題,本人正在看scala,然後對閉包也有疑惑,但是好像編譯一下...

python中的閉包和yield?

Jimmy Cheung 其實嘛,python裡有三種scope,分別是global scope,enclosing scope 和 local scope.第一和第三種就很好理解啦,關鍵在於第二種enclosing scope,closure用的就是這個。當乙個函式wrap另乙個函式 def fo...