我一直在考虑下面的虚拟分配了解范围和易变性在JavaScript:参数的范围和对象可变性在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);
请参阅此处了解为什么“不起作用”部分不起作用的解释:http://stackoverflow.com/questions/13506398/why-are-objects-values-captured-inside-function-calls/13508654#13508654 – slebetman 2015-04-06 03:03:12