我在这个博客上读到,如果一个对象或数组在函数内部发生了变化,那么所指向的内存中的值也会发生变化,就像它在函数外发生变化一样。
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]
为什么这不会像第一个示例中那样改变内存中指向的值?
在 JSBIN上写出示例可能会更好