我被分配了以下虚拟任务来了解 JavaScript 中的范围和可变性:
对于本练习,编写两个函数,reverseArray 和 reverseArrayInPlace。第一个,reverseArray,将一个数组作为参数并生成一个新数组,该数组以相反的顺序具有相同的元素。第二个,reverseArrayInPlace,执行 reverse 方法所做的事情:它修改作为参数给出的数组以反转其元素。两者都不能使用标准的反向方法。
我成功编写了 reverseArray 函数,并希望将其重用于 reverseArrayInPlace 函数。我编写了该函数的 3 个版本,我真的不明白为什么有些工作,而另一些则没有。我将不胜感激有关此 javascript 行为的任何解释。(我知道还有其他方法可以解决 reverseArrayInPlace 但我想知道为什么我的方法不起作用)。
// Reverses an array given as argument and returns it as a NEW array.
function reverseArray(myArray){
var reversedArray = [];
for(var i=0; i<myArray.length; i++){
reversedArray.unshift(myArray[i]);
}
return reversedArray;
}
/*
Reverse the original array in place
*/
// DOESN'T WORK
function reverseArrayInPlace1(myArray){
myArray = reverseArray(myArray);
}
// DOESN'T WORK
function reverseArrayInPlace2(myArray){
var original = [];
for (var i=0; i<myArray.length; i++) {
original[i]=myArray[i];
}
myArray = reverseArray(original);
}
// WORKS
function reverseArrayInPlace3(myArray){
var original = [];
for (var i=0; i<myArray.length; i++) {
original[i]=myArray[i];
}
var newArray = reverseArray(original);
for (var i=0; i<myArray.length; i++) {
myArray[i]=newArray[i];
}
}
miArreglo = ["a", "b", "c", "d" ];
console.log("MyArray: ", miArreglo);
arregloRever=reverseArray(miArreglo);
console.log("Reversed using reverseArray: ", arregloRever);
reverseArrayInPlace1(miArreglo);
console.log("Reversed using reverseArrayInPlace1: ",miArreglo);
reverseArrayInPlace2(miArreglo);
console.log("Reversed using reverseArrayInPlace2: ",miArreglo);
reverseArrayInPlace3(miArreglo);
console.log("Reversed using reverseArrayInPlace3: ",miArreglo);