为什么在外部函数之前先调用内部函数?

时间:2018-09-26 14:31:34

标签: javascript function

在下面的代码示例中,输出将为3 2 1。为什么不1 2 3呢? (调用中的圆括号符号a1(是否表示必须首先调用此函数?括号内的所有内容,即a2(a3(50))必须作为number的{​​{1}}参数去使用?

function a1

3 个答案:

答案 0 :(得分:5)

JS引擎必须运行该函数,这样它才能获取其返回值,以便将其传递给下一个函数。

答案 1 :(得分:3)

是的,(中的a1()意味着要调用它。而且,它要做的第一件事就是评估传入的参数。在这种情况下,传入的是一个函数调用,即一个具有自己()集的函数。

这意味着a1需要等待a2被求值,以便它可以将调用a2的返回值作为参数传递给a1a2接受a3作为参数也是如此。

在以下伪代码中,您可以看到:

function a1(number) {
  return number;
}

如果这样称呼:

a1(2+3) // you can't just run a1(2)

您必须首先评估2+3,并评估带有括号的函数,您必须运行整个函数。就您而言,该功能会将某些内容记录到控制台。

编辑:在评论中添加此内容,因为这是OP所寻找的答案。

第一个函数调用实际上开始一个新的执行上下文,并且该函数跳到“调用栈”的顶部,但是该函数执行的第一件事是对参数进行求值。如果该参数是一个函数,则它将启动其自己的执行上下文,并移至“调用堆栈”的顶部,依此类推。而且,由于堆栈以“后进先出”的方式工作,因此必须首先评估最新堆栈。

答案 2 :(得分:0)

因此,基本上,您要做的就是将一个函数的输出作为参数传递给另一个函数。

为了传递a3返回的值,必须先执行它。因此,您得到3 2 1作为输出。