var setup = function(){
console.log("xyz");
return function goBack(){
console.log("It's actually abc");
}
}
現在,在調用全局作用域中的setup()時,控制檯中顯示「xyz」,但返回函數(goBack)未被全局追加範圍。一旦執行setup(),我應該不能從全局範圍訪問goBack?在全局範圍內未找到返回函數
var setup = function(){
console.log("xyz");
return function goBack(){
console.log("It's actually abc");
}
}
現在,在調用全局作用域中的setup()時,控制檯中顯示「xyz」,但返回函數(goBack)未被全局追加範圍。一旦執行setup(),我應該不能從全局範圍訪問goBack?在全局範圍內未找到返回函數
不,你從setup
返回 - 名稱goBack
是無關緊要的。您將需要從setup
調用它的返回值:
var foo = setup();
foo();// calls the function youve named `goBack`
// goBack() does not exist here.
setup
返回一個函數。請撥打電話var result = setup()
。現在您的goBack
存儲在result
變量中。
您現在可以使用result()
從setup
範圍之外呼叫goBack
。
我明白你的意思。但是,當我簡單地執行setup()而不將它存儲在'result'變量中時會發生什麼。我想在這裏理解的是:'goBack'去哪裏? – user3118458
在這種情況下,'goBack'仍然會被垃圾收集器返回並拾取,因爲沒有參考。沒有提及它,就沒有辦法調用它。 –
你可以做的是調用'setup()()'。這會調用setup,並且它們會立即調用'goBack',因爲它是從第一個函數返回的。這是一種立即調用的形式。 –
你可以訪問此功能的GoBack這樣
var setup = function(){
console.log("xyz");
return function goBack(){
console.log("It's actually abc");
}(); // IIFE here
}
setup(); // returns xyz , its actually abc
正如你看到這裏,我已經做了GoBack的成IIFE,並呼籲建立()在全球範圍內。
所有你需要做的就是調用你正在返回的函數。
不,這不是javascript的工作原理... –
@OmriLuzon感謝您的超級有用評論。永遠感謝您的幫助。我所有的疑問都很清楚。 :) – user3118458