es6增加了尾调用优化,但是目前支持的浏览器或者js引擎只有苹果的safari和名为Duktape的嵌入式JavaScript引擎。
- 未启用尾调用优化,递归爆栈
<script>
//递归
function fn(n) {
if (n < 1) {
return
}
console.log(n);
fn(n - 1)
}
fn(100000)
</script>
- 启用尾调用优化
<script>
//启用递归尾部调用优化
function fn(n) {
if (n < 1) {
return
}
console.log(n);
return fn(n - 1)
//return fn(n - 1)会被编译器改成goto count(n-1),
//在不创建新栈的情况下重复执行该函数
}
fn(100000)
</script>