尽管,一旦createFunction运行,我将可以访问内部函数。
function createFunction() {
function printHello() {
return console.log("hello");
}
return printHello;
}
// Both of these return undefined
createFunction(printHello());
createFunction.printHello();
有什么想法吗?
答案 0 :(得分:4)
正确的语法是:
createFunction()();
...或者有点罗::
const returnedFunction = createFunction();
returnedFunction();
...作为printHello
的名称仅在createFunction
中有意义,但是它的值实际上是由该函数返回的。是的,按顺序放置任意数量的()
是完全可以的。
作为一个旁注,返回console.log('hello')
的结果几乎没有意义:记录本身是一个副作用,无需检查其结果。
答案 1 :(得分:1)
尽管,一旦createFunction运行,我将可以访问内部函数。
否,您不能访问其外部函数内部的变量。如果调用函数,则这些变量存在,但无法访问它们。但是,如果值被return
赋值,则可以像使用该表达式一样使用函数调用。在您的情况下,您可以返回该函数,以便可以通过以下方式访问它:
var print = createFunction();
print();
或者作为一个单行:
createFunction()();
答案 2 :(得分:0)
在您的代码中,createFunction返回另一个函数,因此要执行内部函数,必须通过在createFunction的返回值之后附加()来调用内部函数,即createFunction()();。
createFunction()提供printHello =函数定义
createFunction()()与printHello **()**
如果我们简化了您的代码,我们可以将其重写为
function printHello() {
console.log("hello");
};
function createFunction() {
return printHello;
};
console.log("return value of: createFunction()");
console.log(createFunction());
console.log("return value of: createFunction() () --> printHello()");
createFunction()();