为什么我的子函数需要“return”语句以避免出错?父函数没有“返回”,也没有错误

Why does my child function require a 'return' statement to avoid erroring out? The parent function has no 'return' and no error

本文关键字:函数 有错误 返回 出错 子函数 我的 return 为什么 语句      更新时间:2023-09-26
var a = function(param1) {
    var b = function(param2) {
        console.log(param1 + param2);
    }; 
    return b;
};
a(4)(5); // this logs "9"
返回

语句(在本例中为"返回 b")是否始终是必需的?为什么我们在这里需要一个函数,而不是另一个函数?什么时候有必要,为什么?

表达式

a(4)(5)

首先使用参数 4a(4) ) 调用函数a,返回 b(这是一个函数)。然后使用参数 5 调用此返回的函数。它和你做的一样

c = a(4); 
c(5);

因此,您需要外部函数a来返回函数 - 因为您将它的结果视为函数。而且你不在乎内部函数是否b返回任何内容,因为你不使用结果,所以它是否返回任何东西并不重要。

最后一行a(4)(5);调用a作为函数(输入为 4),然后立即调用a的结果作为函数(输入为 5)。 就像你现在一样,a返回一个函数b,所以工作得很好。

如果不尝试,我会猜测注释掉最后一条return语句会导致"未定义不是函数错误"或类似错误。在没有 return 语句的情况下,函数的结果是 undefined 。因此,尝试将a的结果作为函数调用失败。

返回

语句(在本例中为"返回 b")是否始终是必需的?

返回语句并不总是必需的。但是,在本例中,表达式:

a(4)(5)

要求a(4)返回一个可以用 (5) 调用的函数。考虑:

var x = a(4);
x(5);

为什么我们在这里需要一个函数,而不是另一个函数?

默认情况下,函数返回未定义的值。如果希望函数返回其他值,则必须使用 return 语句。在这种情况下,a需要返回一个函数,它需要一个 return 语句来执行此操作。

请注意,b 还具有 param1 的闭包,以便表达式param1 + param2按预期工作。

什么时候有必要,为什么?

每当您希望函数返回未定义以外的某些值时,这是必要的。