为什么函数首先在console.log中执行?

Nar*_*shi 3 javascript console console.log

看看这个片段:

let first = 1;

function second() {
  console.log(2);
}

console.log(first, second()); // 2 1
Run Code Online (Sandbox Code Playgroud)

1 2我希望它按顺序打印而不是2 1. 为什么函数second先执行?我观察到,如果两个参数都是console.log函数,则它们传递的顺序将被保留(参见下面的示例)

function first() {
  console.log(1);
}

function second() {
  console.log(2);
}

console.log(first(), second()); // 1 2
Run Code Online (Sandbox Code Playgroud)

请用相关资源解释此行为。

Cer*_*nce 5

在调用包含参数列表的函数之前,将计算参数列表中的所有参数。所以

someFn(first(), second());
Run Code Online (Sandbox Code Playgroud)

始终调用first,然后调用second(以及任何其他参数),直到它得出中间值,例如

someFn(firstResultExpression, secondResultExpression);
Run Code Online (Sandbox Code Playgroud)

此时someFn将使用这些(现已解析)表达式进行调用。

在这种情况下,someFn恰好是console.log. 因此,如果自己first()记录second()任何内容,这些日志将始终首先出现,在最后一个someFn开始执行任何操作之前。