为什么要先执行JavaScript中优先级较低的运算符?
我正在运行一行代码,其中包含函数调用和console.log。根据优先级表,函数调用为什么要先执行JavaScript中优先级较低的运算符?,javascript,function,operator-precedence,Javascript,Function,Operator Precedence,我正在运行一行代码,其中包含函数调用和console.log。根据优先级表,函数调用()运算符的值为19,而分组运算符的优先级最高(20)。那么,它不应该先在分组内部做任何事情吗 function fn() { console.log("foo"); } fn() + (console.log("bar")) 这将在第一行打印foo,然后在bar上打印 而根据我应该看到的: bar foo 这里缺少什么?JS引擎从左到右计算“+”运算符 构建语法树fn()是左侧节点,另一条语句是右侧节点
()
运算符的值为19,而分组运算符的优先级最高(20)。那么,它不应该先在分组内部做任何事情吗
function fn() {
console.log("foo");
}
fn() + (console.log("bar"))
这将在第一行打印foo
,然后在bar
上打印
而根据我应该看到的:
bar
foo
这里缺少什么?JS引擎从左到右计算“+”运算符
构建语法树fn()是左侧节点,另一条语句是右侧节点。解释器计算左节点并将其放入堆栈,然后计算右节点并将结果放入堆栈,然后对堆栈上最上面的两个元素执行+运算。JS引擎从左到右计算“+”运算符
构建语法树fn()是左侧节点,另一条语句是右侧节点。解释器计算左侧节点并将其放入堆栈,然后计算右侧节点并将结果放入堆栈,然后对堆栈上最上面的两个元素执行+运算。与之不同。如果你进一步阅读你自己的链接,它也会告诉你,我知道什么是联想性。我认为当操作符优先级相等时,关联性就开始发挥作用。这与我的想法不同。如果你进一步阅读你自己的链接,它也会告诉你,我知道什么是联想性。我认为当操作符优先级相等时,关联性就开始发挥作用。你能告诉我为什么它首先计算“+”操作符吗?显然,“函数调用”和“分组”操作符具有更高的优先级。JavaScript解释器解析JavaScript代码,创建语法树,然后遍历和执行(计算表达式)树叶。行:fn()+(console.log(“bar”)创建了一个包含两个节点的二叉树。并且每个操作(函数调用和分组)都在不同的节点(叶)上结束,它们的优先级仅在它们所在的树节点中有意义-语法树的每个节点都被计算(执行)结果分别应用+运算。非常感谢您的友好解释。您能告诉我为什么要先计算“+”运算符吗?显然,“函数调用”和“分组”操作符具有更高的优先级。JavaScript解释器解析JavaScript代码,创建语法树,然后遍历和执行(计算表达式)树叶。行:fn()+(console.log(“bar”)创建了一个包含两个节点的二叉树。每个操作(函数调用和分组)都在不同的节点(叶)上结束,它们的优先级仅在它们所在的树节点中有意义-语法树的每个节点都单独计算(执行),然后在结果上应用+操作。非常感谢您的解释。