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());后是降序*/
}
因为函数里的赋值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里面印出来