# 函数参数传递

# 按值传递

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);

# 总结

按照红宝书所说的不管是引用还是值 都可以说成是按值传递。 可以这么理解,不管是对值的拷贝,还是对引用的拷贝,都可以说成是按值传递。

为什么会有共享传值,如果真的按引用传递的话,那么给传递的值赋予新的值,那么连同原来的对象也应该改变,但是却直接断了联系,我们可以看作是拷贝了引用,这样就能够说的通为什么可以改变。