V8 if 语句优化究竟是如何工作的

问题描述 投票:0回答:1

我正在阅读错误报告“在 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
将是多余的。那么这怎么会是一个错误呢?

v8
1个回答
0
投票

怎么回事

if (i > 3) {} else {}

如果
i
始终为 0,则
else
将是多余的。

0 > 3
是假的,所以
else
在这种情况下将是唯一的 non-redundant 东西:

let i = 0;
if (i > 3) {
  console.log("redundant, may be optimized out");
} else {
  console.log("executed!");
}
© www.soinside.com 2019 - 2024. All rights reserved.