Chromium居然承认了我发现的v8 Bug

100 阅读1分钟

最近在搬砖的时候业务思维下,写了一段很普通的代码,大致结构如下:

 <script>
      function fn() {
        debugger;
        const obj = {
          a: [],
        };
        const target = {};
        for (const k in obj) {
          const val = obj[k];
          val.forEach((idx) => {
            if (target[k]) {
              //
            }
          });
        }
      }
      fn();
    </script>

乍一看没什么问题对吗?内部省略了一些业务计算逻辑,当时为了调试计算是否正确,在调试模式中逐行运行进入 fn 之后,在 for in 循环执行之前浏览器一定会崩溃。

经过我的测试,有如下特点:

  • 非调试模式没有问题
  • 调试模式直接越过 fn 函数没有问题
  • target对象拿出fn作用域没有问题
  • forEach中不访问target属性没有问题

于是向Chromium提了一个issue,很快他们就有了排查结果,承认这是v8 JavaScript组件bug并定位了导致问题的commit,优先级P2,状态变为已分配了,应该后续很快就会修复了。

issue详情链接在这(英文描述部分机翻的):issues.chromium.org/issues/4054…

趁还没修复,感兴趣的大佬可以复制代码找个html文件运行一下,看起来是9个月前的一个commit导致的。