为什么我无法使用点语法访问返回的函数



我虽然一旦创建函数运行,我将可以访问内部函数。

function createFunction() {
function printHello() {
return console.log("hello");
}
return printHello;
}
// Both of these return undefined
createFunction(printHello());
createFunction.printHello();

有什么想法吗?

正确的语法是:

createFunction()();

。或者,更罗嗦一点:

const returnedFunction = createFunction();
returnedFunction();

。因为printHello这个名字只在createFunction中有意义,但它的值实际上是由该函数返回的。是的,按您想要的顺序放置任意数量的()是完全可以的。

作为旁注,返回console.log('hello')的结果毫无意义:日志记录本身是一种副作用,无需检查其结果。

我虽然一旦创建函数运行,我将可以访问内部函数。

不可以,您不能访问函数内部的变量。如果调用函数,这些变量存在,但无法访问它们。但是,如果值被returned,则可以像使用该表达式一样使用函数调用。在您的情况下,您可以返回该函数,以便您可以按以下方式访问它:

var print = createFunction();
print();

或者作为单行:

createFunction()();

在你的代码中,createFunction 返回另一个函数,所以要执行内部函数,你必须通过在 createFunction 的返回值后附加 (( 来调用内部函数,即 createFunction((((;

createFunction(( give 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()();

最新更新