涉及面試題:什麼是閉包?
經典面試題,迴圈中使用閉包解決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 ...