對JS閉包的認識

2021-10-05 23:49:57 字數 857 閱讀 9405

涉及面試題:什麼是閉包?

經典面試題,迴圈中使用閉包解決var定義函式的問題

for

(var i =

1; i <=

5; i++

), i *

1000

)}

首先因為 settimeout 是個非同步函式,所以會先把迴圈全部執行完畢,這時候 i 就是 6 了,所以會輸出一堆 6。

解決辦法有三種,第一種是使用閉包的方式

for

(var i =

1; i <=

5; i++

), j *

1000)}

)(i)

}

在上述**中,我們首先使用了立即執行函式將 i 傳入函式內部,這個時候值就被固定在了引數 j 上面不會改變,當下次執行 timer 這個閉包的時候,就可以使用外部函式的變數 j,從而達到目的。

第二種就是使用 settimeout 的第三個引數,這個引數會被當成 timer 函式的引數傳入。

for

(var i =

1; i <=

5; i++),

i *1000

, i

)}

第三種就是使用 let 定義 i 了來解決問題了,這個也是最為推薦的方式

for

(let i =

1; i <=

5; i++

), i *

1000

)}

對js閉包的理解

在w3c和網上其他地方看了一下閉包,記錄一下個人理解。個人認為,閉包就是乙個函式內包含另乙個函式 然後函式外可以呼叫另乙個函式內的變數或函式返回值。看到這,大家都會覺得。還要你說,傻子都知道。但是,事實就是如此,來段 window.onload function function doreduce ...

再次認識閉包

1 官方一點說,能夠讀取其他函式內部的區域性變數的函式,即為閉包。抓住幾個點 2 從表現上來認識 乙個函式a裡定義了另乙個函式b,b讀取了a的區域性變數 3 從特性上去認識 函式內定義的區域性變數,會隨著函式的執行完畢而被銷毀,記憶體被 但是在閉包存在的情況下,區域性變數被閉包函式引用,因此沒有被立...

關於閉包的幾點認識

什麼是閉包?閉包一般人都說,是函式中定義的乙個函式,有的人也說函式中套函式。其實準確點說,閉包是乙個能夠訪問到其他函式內部變數的函式,當然這個其他函式不是父子關係的函式,而是兄弟關係的函式。舉個最簡單的例子引導一下 function alwayslinger console.log num num ...