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