我在this blog上讀到關於如果一個對象或數組在函數內部被改變時,指向的內存中的值也會被改變,就像它在函數外被改變一樣。爲什麼在函數中改變的對象改變了它們在內存中的指向,但有時會創建一個新的內存對象?
var a = [1,2,3],
b = a;
b[0] = 5;
console.log(a); // [5, 2, 3]
會導致相同
var a = [1,2,3],
b = a;
var arrayFunction = function(arr){
arr[0] = 10;
};
var arr = arrayFunction(b);
console.log(a, b, arr) // [10, 2, 3], [10, 2, 3], [10, 2, 3];
但我不明白的是,爲什麼在函數內部重新分配多陣列值不改變它之外的值:
var a = [1,2,3],
b = a;
var arrayFunction = function(arr){
arr = ["a", "b", "c"];
return arr;
};
var result = arrayFunction(b);
console.log(result) //["a", "b", "c"]
console.log(a, b); //[1, 2, 3], [1, 2, 3]
爲什麼不像第一個例子那樣改變內存中指向的值?
大概就the JSBIN
這應該回答你的問題:http://stackoverflow.com/questions/6605640/javascript-by-reference-vs-by-value – Pevara