为什么先执行 JavaScript 中优先级较低的运算符?
Why operator with lower precedence in JavaScript is being executed first?
我是运行一行代码,里面有一个函数调用,console.log。根据优先级table,函数调用()
运算符的值为19,而分组运算符的优先级最高(20)。那么,它不是应该先在分组内做什么吗?
function fn() {
console.log("foo");
}
fn() + (console.log("bar"))
这会在第一行打印 foo
,然后是 bar
。
虽然根据 this 我应该看到:
bar
foo
我在这里错过了什么?
JS 引擎从左到右计算“+”运算符。
构建语法树fn()是左边节点,other语句是右边节点。解释器计算左节点并将其放入堆栈,然后计算右节点并将结果放入堆栈然后对堆栈上的两个最顶层元素执行 + 操作。
我是运行一行代码,里面有一个函数调用,console.log。根据优先级table,函数调用()
运算符的值为19,而分组运算符的优先级最高(20)。那么,它不是应该先在分组内做什么吗?
function fn() {
console.log("foo");
}
fn() + (console.log("bar"))
这会在第一行打印 foo
,然后是 bar
。
虽然根据 this 我应该看到:
bar
foo
我在这里错过了什么?
JS 引擎从左到右计算“+”运算符。
构建语法树fn()是左边节点,other语句是右边节点。解释器计算左节点并将其放入堆栈,然后计算右节点并将结果放入堆栈然后对堆栈上的两个最顶层元素执行 + 操作。