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

标签 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);

最佳答案

您对 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/

相关文章:

javascript - 从 JavaScript 中的字符串中去除所有非数字字符

javascript - D3.js:折线图 - 工具提示和悬停垂直线

algorithm - 通路/道路铺设问题

c++ - 确定一个数组是否可以分成两个子序列,每个子序列的顺序都是递增的

javascript - N 个排序整数数组的交集有限制

c - 当我在 Quicksort5 函数中激活该行时,它的排序效果不佳。但为什么?

javascript - 返回 String vs Integer vs undefined vs null

javascript - Kendo UI 甘特图刷新数据源

javascript - 如何设置和跟踪用户的在线状态

c++ - std::accumulate 有引用吗?