2017-05-31 156 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,并呼吁建立()在全球范围内。

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