从另一个函数返回的函数

Function returned from another function

提问人:SHAILY 提问时间:11/17/2023 最后编辑:0stone0SHAILY 更新时间:11/17/2023 访问量:55

问:

在尝试运行类似的函数时,我观察到输出存在差异。

function func1(){
     function sum(){
        console.log(2+5);
    }
    return sum();
}
func1();

function func2(){
    return (function sum(){
       console.log(2+5);
   })
    
}

func2();

从 func1 开始,输出为 7。但是从 func2 来看,控制台中什么都没有。这两个函数有什么区别,因为两者都是从函数返回的?为什么一个被调用而另一个没有?

JavaScript 函数 first-class-functions

评论

0赞 0stone0 11/17/2023
Func1 调用该函数,从而返回返回值。Func2 不调用它,而只是返回函数。
0赞 CBroe 11/17/2023
因为您没有调用该函数,所以会返回该函数。这需要func2func2()();
0赞 Wyck 11/17/2023
@CBroe,或者另一种理解方式,其语法可能比将其视为“因为返回一个函数”要少,否则还必须调用返回函数。()()result = func2(); result();func2
0赞 slebetman 11/17/2023
因为不返回函数,而是返回函数。func1func2

答:

2赞 Nina Scholz 11/17/2023 #1

func2返回一个函数,调用它后,你会得到结果。

function func1() {
    function sum() {
        console.log(2 + 5);
    }
    return sum();
}

func1();

function func2() {
    return (function sum() {
        console.log(2 + 5);
    });
}

func2()();            // call function
console.log(func2()); // see function declaration

1赞 J. Vas 11/17/2023 #2

从 func1 开始,输出为 7。但是从 func2 开始,控制台中没有任何内容。这两个函数有什么区别,因为两者都是从函数返回的? 答案是两者的区别在于,第一个的 return 语句调用 sum 函数。

在第二个函数中,返回函数的定义,因此它被定义但未调用,导致没有输出。