js中递归导致的堆栈溢出

在编程中递归是一个很常见的操作,但在js中使用递归很容易一不小心导致堆栈溢出,原因也很简单,是因为我们最常用的闭包,如下例子

1
2
3
4
5
6
7
8
9
10
11
12
13
function isEven (num) {
if (num === 0) {
return true;
}

if (num === 1) {
return false;
}

return isEven(Math.abs(num) - 2);
}

isEven(100);

因为递归所以导致每一层的isEven函数都保留了之前所有层的函数空间