当我没有定义参数时,为什么会出现无限循环?

Ren*_*ama 6 javascript algorithm

我想知道为什么我在这里得到一个无限循环.我只是不想传递这个初始值,所以如果它们是undefined自动计算的.它只是为了清理我的函数调用只使用一个参数.如果我通过它们,一切运行正常,过程结束.有人可以帮忙吗?谢谢

function merge(array, lower, half, upper){
    //Suppressed for the sake of brevity
}

function mergeSort(array, lower, upper){
    if(!lower && !upper){ //take a look here
        lower = 0;
        upper = array.length - 1;
    }

    if(lower < upper){
        var half = Math.floor((lower + upper)/2);

        mergeSort(array, lower, half);
        mergeSort(array, half + 1, upper);
        merge(array, lower, half, upper);
    }
}

var array = [8, 3, 6, 4, 1, 0, 23, 12, 15, 63];
mergeSort(array); //infinite loop here
console.log(array);
Run Code Online (Sandbox Code Playgroud)

jAn*_*ndy 7

你的第一个递归调用将mergeSort0作为第一个参数传递,因为你设置它.

既然!0还有评价false,在这里你去..

undefined通过使用typeof操作员更好地检查

if(typeof lower === 'undefined' && typeof upper === 'undefined'){ //take a look here
    lower = 0;
    upper = array.length - 1;
}
Run Code Online (Sandbox Code Playgroud)

或者,甚至更好,检查arguments.length,像

if( arguments.length === 1 ) {
   var lower = 0,
       upper = array.length -1 ;
}
Run Code Online (Sandbox Code Playgroud)