我想知道为什么会出现无限循环。我只是不想传递这个初始值,所以如果它们是 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);
最佳答案
您对 mergeSort
的第一次递归调用将它作为第一个参数传递给 0
,因为您是这样设置的。
因为 !0
也计算为 false
,所以你开始吧..
使用 typeof
运算符更好地检查 undefined
if(typeof lower === 'undefined' && typeof upper === 'undefined'){ //take a look here
lower = 0;
upper = array.length - 1;
}
或者,更好的是,检查arguments.length
,比如
if( arguments.length === 1 ) {
var lower = 0,
upper = array.length -1 ;
}
关于javascript - 为什么我没有定义参数时会出现无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11634573/