Javascript 在全局作用域中找不到返回函数
现在,在全局范围内调用setup()时,控制台中会显示“xyz”,但返回函数(goBack)不会追加到全局范围内。执行setup()后,我是否应该能够从全局作用域访问goBack?否,您是从Javascript 在全局作用域中找不到返回函数,javascript,function,return,Javascript,Function,Return,现在,在全局范围内调用setup()时,控制台中会显示“xyz”,但返回函数(goBack)不会追加到全局范围内。执行setup()后,我是否应该能够从全局作用域访问goBack?否,您是从setup返回的-名称goBack不相关。您需要在设置的返回值上调用它: var setup = function(){ console.log("xyz"); return function goBack(){ console.log("It's actually abc")
setup
返回的-名称goBack
不相关。您需要在设置
的返回值上调用它:
var setup = function(){
console.log("xyz");
return function goBack(){
console.log("It's actually abc");
}
}
setup
正在返回一个函数
要访问它,首先调用var result=setup()
。现在,在result
变量中存储了goBack
您现在可以使用
result()
从setup
范围之外调用goBack
您可以像这样访问此函数goBack
var foo = setup();
foo();// calls the function youve named `goBack`
// goBack() does not exist here.
正如您在这里看到的,我将goBack转换为一个iLife,并在全局范围内调用setup()
您所需要做的就是调用要返回的函数 不,这不是javascript的工作方式…@OmriLuzon谢谢你的评论。永远感谢你的帮助。我所有的疑问都很清楚我明白你的意思。但是,当我只执行setup()而不将其存储在“result”变量中时会发生什么呢。这里我想了解的是:“goBack”去哪里了?在这种情况下,
goBack
仍然会被垃圾收集器返回并拾取,因为没有进行任何引用。如果不引用它,就无法调用它。您可以做的是调用setup()()
。这将调用setup,当从第一个函数返回时,它们会立即调用goBack
。这是一种即时调用的形式,这很有意义。我是JavaScript新手,还没有听说过垃圾收集器。我会查的。也不知道我可以像setup()那样调用setup。谢谢你的帮助!:)
var setup = function(){
console.log("xyz");
return function goBack(){
console.log("It's actually abc");
}(); // IIFE here
}
setup(); // returns xyz , its actually abc