今天我注意到 JavaScript 在某些条件下会忽略某些行的执行。
例如,一个正常人读下面的代码会认为value is false
应记录 5 次。
const values = [false, false, false, false, false];
const isTrue = (value) => {
console.log(`value is ${value}`);
return !!value;
};
let isAllTrue = true;
values.forEach(value => {
isAllTrue &&= isTrue(value);
});
但是,此代码记录了一次。
此代码显示一旦 isAllTrue
是 false
, isAllTrue
永远不会true
由于&&=
无论你做什么。
这就是为什么我认为函数执行被忽略的原因。
我认为这是 JavaScript 的优化。
我想知道确切的原因,所以我用谷歌搜索,但找不到规范。 如果您知道规范在哪里,请告诉我。
最佳答案
您正在见证short-circuit evaluation .
首先,让我们解开 isAllTrue &&= isTrue(value)
使其更清晰一些。如果我们以较长的形式编写此语句,它将是 isAllTrue = isAllTrue && isTrue(value)
。
第一次迭代后,isAllTrue
将为false
,因此无论isTrue(value)
返回什么,的结果>isAllTrue && isTrue(value)
将始终为 false
。由于无需评估 isTrue(value)
即可知道结果,因此 JavaScript 会对其进行优化,甚至不会调用它。
关于javascript - 为什么javascript在某些条件下会忽略某些行的执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70505690/