Javascript:这个合并排序的Javascript实现有什么问题?

Javascript:这个合并排序的Javascript实现有什么问题?,javascript,mergesort,Javascript,Mergesort,我正在尝试使用javascript实现合并排序。 以下是我发现逻辑上合理但在运行时失败的代码清单 var a = []; for( i = 0 ; i < 10; i++){ a.push(parseInt(Math.random()*100000)); } function merge(a1, a2){ var res = []; var i = 0, j = 0; while( i <

我正在尝试使用javascript实现合并排序。 以下是我发现逻辑上合理但在运行时失败的代码清单

    var a = [];
    for( i = 0 ; i < 10; i++){
        a.push(parseInt(Math.random()*100000));
    }
    function merge(a1, a2){
        var res = [];
        var i = 0, j = 0;
        while( i < a1.length && j < a2.length){
            if( a1[i] < a2[j] )
                res.push(a1[i++]);
            else
                res.push(a2[j++]);
        }
        while( i < a1.length )
            res.push(a1[i++]);

        while( j < a2.length )
            res.push(a2[j++]);
        return res;
    }

    function mergeSort(a){
        if( a.length <= 1 )
            return a;           
        var q = a.length/2;
        x = mergeSort(a.slice(0,q));
        y = mergeSort(a.slice(q));
        return merge(x,y);
    }
var a=[];
对于(i=0;i<10;i++){
a、 push(parseInt(Math.random()*100000));
}
函数合并(a1,a2){
var-res=[];
var i=0,j=0;
而(i如果(a.length因为您没有用“var”声明这些变量,它们的作用域是全局的:

x = mergeSort(a.slice(0,q));
y = mergeSort(a.slice(q));

因为您没有用“var”声明这些变量,所以它们的作用域是全局的:

x = mergeSort(a.slice(0,q));
y = mergeSort(a.slice(q));

因为您没有用“var”声明这些变量,所以它们的作用域是全局的:

x = mergeSort(a.slice(0,q));
y = mergeSort(a.slice(q));

因为您没有用“var”声明这些变量,所以它们的作用域是全局的:

x = mergeSort(a.slice(0,q));
y = mergeSort(a.slice(q));

您的x和y变量是全局变量(因为您没有用
var
声明它们为局部变量),因此每次调用mergeSort函数时,它都会更改相同的变量,从而导致非常意外的行为

修正:

函数合并排序(a){

如果(a.length您的x和y变量是全局变量(因为您没有用
var
声明它们为局部变量),那么每次调用mergeSort函数时,它都会更改相同的变量,从而导致非常意外的行为

修正:

函数合并排序(a){

如果(a.length您的x和y变量是全局变量(因为您没有用
var
声明它们为局部变量),那么每次调用mergeSort函数时,它都会更改相同的变量,从而导致非常意外的行为

修正:

函数合并排序(a){

如果(a.length您的x和y变量是全局变量(因为您没有用
var
声明它们为局部变量),那么每次调用mergeSort函数时,它都会更改相同的变量,从而导致非常意外的行为

修正:

函数合并排序(a){

如果(a.length,谢谢,'var'ing他们解决了问题。通过这一点,我学会了如果我不给他们做var,他们就不属于本地范围。谢谢,'var'ing他们解决了问题。通过这一点,我学会了如果我不给他们做var,他们就不属于本地范围。谢谢,'var'ing他们解决了问题。通过这一点,我学会了如果我不给他们做var,他们就不属于本地范围然后它们不属于本地范围。谢谢,为它们设置变量修复了问题。通过这一点,我学会了如果我不设置变量,它们就不属于本地范围。谢谢,为它们设置变量修复了问题。通过这一点,我学会了如果我不设置变量,它们就不属于本地范围。谢谢,为它们设置变量修复了问题。通过这一点,我学会了如果我不给它们赋值,那么它们就不属于本地范围。谢谢,“给它们赋值”解决了问题。通过这一点,我学会了如果我不给它们赋值,它们就不属于本地范围。谢谢,“给它们赋值”解决了问题。通过这一点,我学会了如果我不给它们赋值,它们就不属于本地范围。