Javascript factorial函数堆栈溢出

Jon*_*nas 1 javascript

为什么以下javascript factorial函数在调用时会抛出堆栈溢出错误?

function fact(n) {
    return function () {
        var n = n;
        return (n < 2) ? 1 : (n*fact(n - 1));
    }();
};
Run Code Online (Sandbox Code Playgroud)

当我删除该行时,var n = n;它按预期工作.另外,我知道内部函数是冗余的,它只是触发错误.

Esa*_*ija 8

var n = n 在那种情况下有效地做了n = undefined因为形式参数n和声明n来自不同的范围.在您的注释声明n和形式参数n在相同的范围内,所以情况不同.

undefined < 2总是假的,所以它一直在呼唤fact.