# 函数参数传递
# 按值传递
var m = 1;
function foo(a) {
console.log(a); // 1
a = 2;
console.log(a); // 2
}
foo(m);
这儿我们传递 m, 相当于拷贝了一个 m 值。所以我们是按值传递。
# 引用传值
var obj = {a: 1}; // {a: 2};
function foo(o) {
console.log(o); // {a: 1}
o.a = 2;
console.log(o); // {a: 2};
}
foo(obj);
我们在这儿传递了 obj, 当我们改了传递的 obj,外层的 obj 也就会改变。
# 共享传递
var obj = {a: 1}; // {a: 1};
function foo(o) {
console.log(o); // {a: 1};
o = {b: 1};
console.log(o); // {b: 1};
}
foo(obj);
# 总结
按照红宝书所说的不管是引用还是值 都可以说成是按值传递。 可以这么理解,不管是对值的拷贝,还是对引用的拷贝,都可以说成是按值传递。
为什么会有共享传值,如果真的按引用传递的话,那么给传递的值赋予新的值,那么连同原来的对象也应该改变,但是却直接断了联系,我们可以看作是拷贝了引用,这样就能够说的通为什么可以改变。
← 类数组 use strict →