JavaScript函數(shù)的參數(shù)傳遞取決于參數(shù)的類型:
- 若參數(shù)為基本類型,那么按值傳遞
- 若參數(shù)為引用類型,那么按共享傳遞
“按共享傳遞”是“按值傳遞的特殊情況” -- 值是對象存儲地址的副本(address copy)?!鞍垂蚕韨鬟f”的特點可一句話概括為:改屬性不改對象。
1、按值傳遞(call by value)
//函數(shù)內(nèi)部參數(shù)的改變并沒有影響到外部變量
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"; // 參數(shù)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是參數(shù),作用域是函數(shù)內(nèi)
c = {item: "changed"}; // c綁定到了新的對象地址
console.log(c === obj2); // false 因為c已經(jīng)改變了,與原來的不同
}
var obj2 = {item: "unchanged"};
baz(obj2);
console.log(obj2.item); // unchanged