Мне дали следующее фиктивное задание, чтобы узнать о области действия и изменчивости в 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);