JavaScript引擎采用调用栈(call stack)来管理执行上下文(执行环境), 然而调用栈是有大小限制的,当入栈的执行环境超过一定的数量以后,就会引发栈溢出,同时这个引发栈溢出的栈大小由于浏览器的厂商、版本各不相同。
JavaScript的栈结构
执行如下函数,JavaScript引擎会为我们创建如下函数执行栈
var a = 2
function add(b,c){
return b+c
}
function addAll(b,c){
var d = 10
result = add(b,c)
return a+result+d
}
addAll(3,6)
image.png
查看栈溢出大小的代码
chrome浏览器 ctrl + shift + i ,打开控制台输入:
let i = 0;
function a(){
i++;
a();
}
a()
查看i的值
image.png
不同浏览器、版本的栈的限制
Internet Explorer
IE6: 1130
IE7: 2553
IE8: 1475
IE9: 20678
IE10: 20677
Mozilla Firefox
3.6: 3000
4.0: 9015
5.0: 9015
6.0: 9015
7.0: 65533
8b3: 63485
17: 50762
18: 52596
19: 52458
42: 281810
Google Chrome
14: 26177
15: 26168
16: 26166
25: 25090
47: 20878
51: 41753
Safari
4: 52426
5: 65534
9: 63444
Opera
10.10: 9999
10.62: 32631
11: 32631
12: 32631
参考
网友评论