Javascript 为什么可以';使用点语法访问返回的函数
我认为一旦createFunction运行,我就可以访问内部函数了Javascript 为什么可以';使用点语法访问返回的函数,javascript,closures,Javascript,Closures,我认为一旦createFunction运行,我就可以访问内部函数了 function createFunction() { function printHello() { return console.log("hello"); } return printHello; } // Both of these return undefined createFunction(printHello()); createFunction.printHello(); 有什么想法吗?
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
name仅在createFunction
中有意义,但它的值实际上是由该函数返回的。是的,按您想要的顺序放置任意数量的()
是完全可以的
作为旁注,返回console.log('hello')的结果没有什么意义:日志记录本身是一种副作用,不需要检查其结果。正确的语法是:
createFunction()();
。。。或者,更详细一点:
const returnedFunction = createFunction();
returnedFunction();
。。。正如printHello
name仅在createFunction
中有意义,但它的值实际上是由该函数返回的。是的,按您想要的顺序放置任意数量的()
是完全可以的
作为旁注,返回console.log('hello')
的结果没有什么意义:日志记录本身是一种副作用,不需要检查其结果
我认为一旦createFunction运行,我就可以访问内部函数了
function createFunction() {
function printHello() {
return console.log("hello");
}
return printHello;
}
// Both of these return undefined
createFunction(printHello());
createFunction.printHello();
不,您不能访问函数内部的变量。如果你调用一个函数,这些变量是存在的,但是你不能访问它们。但是,如果某个值得到return
ed,则可以像处理该表达式一样处理函数调用。在您的情况下,您可以返回函数,以便通过以下方式访问它:
var print = createFunction();
print();
或者作为一个单行线:
createFunction()();
我认为一旦createFunction运行,我就可以访问内部函数了
function createFunction() {
function printHello() {
return console.log("hello");
}
return printHello;
}
// Both of these return undefined
createFunction(printHello());
createFunction.printHello();
不,您不能访问函数内部的变量。如果你调用一个函数,这些变量是存在的,但是你不能访问它们。但是,如果某个值得到return
ed,则可以像处理该表达式一样处理函数调用。在您的情况下,您可以返回函数,以便通过以下方式访问它:
var print = createFunction();
print();
或者作为一个单行线:
createFunction()();
在代码中,createFunction返回另一个函数,所以要执行内部函数,必须在createFunction的返回值后追加()来调用内部函数,即createFunction();
createFunction()给出printHello=函数定义
createFunction()()与printHello**()相同** 此外,如果我们简化您的代码,我们可以重新编写为 函数printHello(){ console.log(“你好”); }; 函数createFunction(){ 返回printHello; }; log(“返回:createFunction()的值”); log(createFunction()); log(“返回值:createFunction()()-->printHello()”;
createFunction()代码>在您的代码中,createFunction返回另一个函数,因此要执行内部函数,必须在createFunction的返回值后追加()来调用内部函数,即createFunction();
createFunction()给出printHello=函数定义
createFunction()()与printHello**()相同** 此外,如果我们简化您的代码,我们可以重新编写为 函数printHello(){ console.log(“你好”); }; 函数createFunction(){ 返回printHello; }; log(“返回:createFunction()的值”); log(createFunction()); log(“返回值:createFunction()()-->printHello()”;
createFunction()代码>否,您永远无法访问函数中的局部变量。当然,您可以使用函数返回的值(恰好是
printHello
函数)执行操作,然后将该值分配给您自己的变量或调用它或其他任何操作。不,您永远无法访问函数中的局部变量。当然,您可以使用函数返回的值(恰好是printHello
函数)执行操作,然后将该值赋给您自己的变量或调用它或其他任何函数。