JavaScript函数的参数传递

JavaScript函数的参数传递取决于参数的类型:

  • 若参数为基本类型,那么按值传递
  • 若参数为引用类型,那么按共享传递

“按共享传递”是“按值传递的特殊情况” -- 值是对象存储地址的副本(address copy)。“按共享传递”的特点可一句话概括为:改属性不改对象


1、按值传递(call by value)

//函数内部参数的改变并没有影响到外部变量
function foo(a) {
      a = a * 10;
}

var num = 10;
foo(num);
console.log(num);                // 10  没有变化

2、按共享传递(call by sharing)

function bar(b) {
    b.item = "new_value";         // 参数b得到了obj1的地址,也叫"指向obj1"
    console.log(b === obj1) ;     // true
}

var obj1 = {item: "old_value"};
bar(obj1);

console.log(obj1.item);            // new_value
function baz(c) {                  // c是参数,作用域是函数内
    c = {item: "changed"};         // c绑定到了新的对象地址
    console.log(c === obj2);       // false 因为c已经改变了,与原来的不同
}

var obj2 = {item: "unchanged"};
baz(obj2);

console.log(obj2.item);             // unchanged

你可能感兴趣的:(JavaScript函数的参数传递)