最近在搬砖的时候业务思维下,写了一段很普通的代码,大致结构如下:
<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导致的。