Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么要先执行JavaScript中优先级较低的运算符?_Javascript_Function_Operator Precedence - Fatal编程技术网

为什么要先执行JavaScript中优先级较低的运算符?

为什么要先执行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()是左侧节点,另一条语句是右侧节点

我正在运行一行代码,其中包含函数调用和console.log。根据优先级表,函数调用
()
运算符的值为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”)创建了一个包含两个节点的二叉树。每个操作(函数调用和分组)都在不同的节点(叶)上结束,它们的优先级仅在它们所在的树节点中有意义-语法树的每个节点都单独计算(执行),然后在结果上应用+操作。非常感谢您的解释。