一楼空着。
欢迎打断我来讨论。我如果能一口气写完也不需要这样了。
回复 (12)
D
但规范对原生方法的定义从未考虑 edge cases,如 StackOverflow、OutOfMemory。
D
正常人一般不会干出改数组元素描述符的事,所以这些方法这样实现也没什么问题。。。 点进去之前我还以为想讲Atomic。。。
D
对于 Set 容器,因其不能用下标访问,理论上可以存放无数元素,故写出如下代码测试:
const set = new Set;
for(; ; ) set.add(Symbol());
D
在 Chrome Canary x64 68.0.3401.0(V8 6.8.44)上,如上代码直接崩溃页面。 在 Firefox Nightly x64 61.0a1 (2018-04-21) 上,如上代码被警告、继续多次后烧光内存。
D
为了测试 StackOverflow 是否会发生在原生方法中,有如下代码:
const set = new Set;
const fn = () => {
try{
return fn();
}catch(_){}
try{
set.add("test");
}catch(error){
return error;
}
};
fn();
D
在 Chrome Canary x64 68.0.3401.0(V8 6.8.44)上,set.add("test")不报错,可见原生方法从调用到返回都不占用调用栈。
D
在 Firefox Nightly x64 61.0a1 (2018-04-21) 上,set.add("test")报错,但定位在fn中,故不能得出原生方法不报 StackOverflow 的结论。
D
在 Chrome Canary x64 68.0.3401.0(V8 6.8.44)上,放入for循环就报错了。。(看来不占用调用栈是解释器福利)
D
我放弃讨论。
hhhh
Y
引用 FrankFang__legacy_5560108c4eb040084cfe5d2ahhhh
@FrankFang 卢本伟牛逼
参与回复
登录后即可参与回复。登录