[已放弃] JS 各实现中原生有副作用方法的事务性讨论
一楼空着。
欢迎打断我来讨论。我如果能一口气写完也不需要这样了。
12 回复
对于 Set 容器,因其不能用下标访问,理论上可以存放无数元素,故写出如下代码测试:
const set = new Set;
for(; ; ) set.add(Symbol());
在 Chrome Canary x64 68.0.3401.0(V8 6.8.44)上,如上代码直接崩溃页面。 在 Firefox Nightly x64 61.0a1 (2018年04月21日) 上,如上代码被警告、继续多次后烧光内存。
为了测试 StackOverflow 是否会发生在原生方法中,有如下代码:
const set = new Set;
const fn = () => {
try{
return fn();
}catch(_){}
try{
set.add("test");
}catch(error){
return error;
}
};
fn();
在 Chrome Canary x64 68.0.3401.0(V8 6.8.44)上,set.add("test")不报错,可见原生方法从调用到返回都不占用调用栈。
在 Firefox Nightly x64 61.0a1 (2018年04月21日) 上,set.add("test")报错,但定位在fn中,故不能得出原生方法不报 StackOverflow 的结论。