2017-05-31 165 views
-1
var setup = function(){ 
    console.log("xyz"); 
    return function goBack(){ 
     console.log("It's actually abc"); 
    } 
} 

現在,在調用全局作用域中的setup()時,控制檯中顯示「xyz」,但返回函數(goBack)未被全局追加範圍。一旦執行setup(),我應該不能從全局範圍訪問goBack?在全局範圍內未找到返回函數

+0

不,這不是javascript的工作原理... –

+0

@OmriLuzon感謝您的超級有用評論。永遠感謝您的幫助。我所有的疑問都很清楚。 :) – user3118458

回答

0

不,你從setup返回 - 名稱goBack是無關緊要的。您將需要從setup調用它的返回值:

var foo = setup(); 
foo();// calls the function youve named `goBack` 
// goBack() does not exist here. 
2

setup返回一個函數。請撥打電話var result = setup()。現在您的goBack存儲在result變量中。

您現在可以使用result()setup範圍之外呼叫goBack

+0

我明白你的意思。但是,當我簡單地執行setup()而不將它存儲在'result'變量中時會發生什麼。我想在這裏理解的是:'goBack'去哪裏? – user3118458

+0

在這種情況下,'goBack'仍然會被垃圾收集器返回並拾取,因爲沒有參考。沒有提及它,就沒有辦法調用它。 –

+0

你可以做的是調用'setup()()'。這會調用setup,並且它們會立即調用'goBack',因爲它是從第一個函數返回的。這是一種立即調用的形式。 –

0

你可以訪問此功能的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,並呼籲建立()在全球範圍內。

所有你需要做的就是調用你正在返回的函數。