我在觀看視頻時遇到了這個問題,雖然他們很好地解釋了閉包,但他們并沒有真正解釋這些功能是如何鏈接的。所以,我仍然不明白如何呼叫 newFunction('inside') 以某種方式設定outerVariable 和innerVariable 的值。誰能解釋一下這是如何作業的?這是代碼:
function outerFunction(outerVariable){
return function innerFunction(innerVariable) {
console.log('Outer Variable ' outerVariable)
console.log('Outer Variable ' innerVariable)
}
}
const newFunction = outerFunction('outside')
newFunction('inside')
uj5u.com熱心網友回復:
這一行:
newFunction('inside')
不設定outerVariable。這里發生的是一個經典的 javascript 閉包。閉包使您可以從內部函式訪問外部函式的作用域。
在這種情況下:
const newFunction = outerFunction('outside')
將回傳一個新函式(在我們的例子中是它的innerFunction),并且innerFunction 在被呼叫時將可以訪問它的周圍狀態(詞法環境)。在這種情況下,我們周圍的狀態是 outerVariable 變數。
所以基本上,在這一點上它類似于:
var outerVariable = "outside"
function innerFunction(innerVariable) {
console.log('Outer Variable ' outerVariable)
console.log('Outer Variable ' innerVariable)
}
當您使用“inside”呼叫innerFunction時,ofc innerVariable 將是“inside”,而outerVariable 將具有“outside”值。
uj5u.com熱心網友回復:
這是一個經典的閉包。當您outerFunction在此行中呼叫時:
const newFunction = outerFunction('outside')
newFunction保存innerFunction為回傳值。閉包原則確保 newFunction 也接收到所有的執行背景關系innerFunction。這意味著它接收outerVariable具有outside在上一行中傳遞給它的值的變數 。這就是它如何不僅可以列印innerVariable您在呼叫時傳遞的內容,newFunction還可以列印outerVariable.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/339348.html
標籤:javascript 功能
