为什么console.log的位置会改变array内部的顺序?javascript

var array = [5,21,15,32,16,18,17];
            function arr1() {
                var arr1= array;
                for(let i = 0; i<arr1.length;i++) {
                    for(let j = 0; j < arr1.length-i-1; j++) {
                        if(arr1[j+1] > arr1[j]) {
                            let temp = arr1[j];
                            arr1[j] = arr1[j+1];
                            arr1[j+1] = temp;
                            }
                        }
                    }
                return arr1.reverse();
                }
            function arr2(){
                var arr2=array;
                for(var i = 0;i<arr2.length;i++){
                    var n=i;
                    while(arr2[n] > arr2[n+1] && n>=0){
                        var tem = arr2[n];
                        arr2[n] = arr2[n+1];
                        arr2[n+1] = tem;
                        n--;
                    }
                }
                return arr2.reverse();
            }
            function arr3(){
                var arr3=array
                arr3.sort((a,b) => b-a);
                return arr3.reverse();
            }
            console.log(arr1());
            console.log(arr2());
            console.log(arr3());
            console.log(array);/*放在console.log(arr1());前是原本的乱序,放在console.log(arr1());后是升序,放在console.log(arr2());后是降序*/
        }

img

img

img

img

因为函数里的赋值var arr2=array是浅拷贝,这样的话函数arr1,arr2,arr3以及你的打印都是操作的array这个数组。按顺序进行操作,位置不一样,结果就不一样。如果想让他们互不影响,可以var arr2=[...array]这样赋值.
可以参考一下深浅拷贝


对你有用的话,请点击一下【采纳此答案】,谢谢🌹

拿console.log(arr1())为例子,你console.log是一个函数console.log()就是在调用函数,arr1也是函数,那你arr1()也是在调用函数啊,你console.log(arr1())可不就是执行了一遍arr1(),而arr1、2、3执行的内容不一样,你让他们前后执行结果肯定不一样啊。

你能问出这样的问题来,说明够新的,那我们恐怕得从头开始讲了
1.console.log并不改变任何东西,它只负责打印,改变顺序的是arr1,arr2,arr3这3个函数,那么你在改变顺序之前打印array和在改变顺序之后打印array,打印出来的东西肯定是不一样的了
2.函数可以嵌套使用,console.log(arr1()),先执行arr1,再将它的返回值放console.log里面印出来