为什么函数在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
看看这个片段:
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