我正在阅读错误报告“在 String.indexOf 的 TurboFan 范围优化中被一个关闭” 在铬论坛上。
我对代码的一部分感到困惑
var i = 'A'.repeat(2**28 - 16).indexOf("", 2**28);
i += 16; // real value: i = 2**28, optimizer: i = 2**28-1
i >>= 28; // real value i = 1, optimizer: i = 0
i *= 100000; // real value i = 100000, optimizer: i = 0
if (i > 3) {
return 0;
} else {
var arr = [0.1, 0.2, 0.3, 0.4];
return arr[I];
}
据我所知,TruboFan 编译器可以删除多余的
if
语句。
怎么回事
if (i > 3) {} else {}
如果键入
i
始终为 0,则 else
将是多余的。那么这怎么会是一个错误呢?
怎么回事
if (i > 3) {} else {}
如果始终为 0,则i
将是多余的。else
0 > 3
是假的,所以 else
在这种情况下将是唯一的 non-redundant 东西:
let i = 0;
if (i > 3) {
console.log("redundant, may be optimized out");
} else {
console.log("executed!");
}