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

Why function is executed first in console.log?

看看这个片段:

let first = 1;

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

console.log(first, second()); // 2 1

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

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

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

console.log(first(), second()); // 1 2

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

在调用包含参数列表的函数之前评估参数列表中的所有参数。所以

someFn(first(), second());

总是调用first,然后调用second(连同任何其他参数),直到它得出像[=20这样的中间值=]

someFn(firstResultExpression, secondResultExpression);

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

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

post 有点误导,因为注释表明输出是 2 1

console.log(first, second()); // 2 1

但是实际输出的是:

2
1 undefined

我们首先得到 2 输出,因为 console.log(first, second()) 调用 second() 并在 console.log.

中输出 2

注意函数second() return什么都没有。 如果函数中省略了 return 值,则 undefined 被 return 代替。

然后 console.log(first, undefined) 被评估,我们得到输出

1 undefined

请注意,如果 second() return 编辑了一个值(例如 3):

let first = 1;
function second() {
   console.log(2);
   return 3;
} 
console.log(first, second());

那么输出就是

2
1 3