Все это время мое мышление об оценках короткого замыкания кажется неправильным.Порядок оценки короткого замыкания
В JavaScript:
var a = false, b = true, c=true;
a && b || c; // Evaluates to true
По сравнению с
var a = false, b = true, c=true;
a && (b || c); // Evaluates to true
Почему не остановить VM, когда он видит, что a
ложно?
Более явный пример:
function a(){
console.log("I'm A");
return false;
}
function b(){
console.log("I'm B");
return true;
}
function c(){
console.log("I'm C");
return true;
}
a() && b() || c();
Выход:
I'm A
I'm C
true
Таким образом, очевидно
a && b || c === (a && b) || c
Так что я запутался, почему он автоматически завернуть в & & b вместе? Что такое порядок операций для этих выражений?
Поддерживает ли большинство языков этот порядок (похоже, PHP выглядит так)?
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence – NINCOMPOOP