(unknown) Uncaught RangeError: Maximum call stack size exceeded

版权声明:大家好,我是笨笨,笨笨的笨,笨笨的笨,转载请注明出处,谢谢! https://blog.csdn.net/jx520/article/details/81910400

网上一搜普遍会说“递归”了。
通常这是对的,但并不是绝对如此。
我们用【孤狗】击翻一下

(未知)未捕获RangeError:超出最大调用堆栈大小

不懂什么是【调用】也不懂什么是【堆栈】
我们只关心一下【超出大小】,这就是问题的关键。
递归调用是常见的造成【调用堆栈超出大小】的原因,但是我们也有一些比较纯朴的手法可以实现 。
比如:

var str = "'console.log('";
//如果你那里不报错,可以试着加大循环次数
for(i = 0; i<9999; i++){
    str = str + " + '我是第" + i + "个测试字符串'";
}
str += "+ ');'";
eval(str);

这里模拟的就是一个字符串拼接的过程,N段字符串,在一句里拼接。结果就呵呵了。
当然要解决这个问题也简单。把拼接过程换成压入数组,最后再把数组join(”)来得到字符串就好了。其实这样的效率比拼接的快(我也是听别人说的)

var strArr = ['console.log("'];
//如果你那里不报错,可以试着加大循环次数
for(i = 0; i<9999; i++){
    strArr.push('我是第' + i + '个测试字符串');
}
strArr.push('");');
eval(strArr.join(''));

猜你喜欢

转载自blog.csdn.net/jx520/article/details/81910400