基本数值类型:传值;
引用类型:严格来说不能算传引用,在js中叫按共享传递 call by sharing也叫按对象传递、按对象共享传递。 该策略的重点是:调用函数传参时,函数接受对象实参引用的副本(既不是按值传递的对象副本,也不是按引用传递的隐式引用)。
它和按引用传递的不同在于:在共享传递中对函数形参的赋值,不会影响实参的值。如下面例子中,不可以通过修改形参o的值,来修改obj的值。
示例代码如下:
var obj = {x : 1};
function foo(o) {
o = 100;
}
foo(obj);
console.log(obj.x); // 仍然是1, obj并未被修改为100.
然而,虽然引用是副本,引用的对象是相同的。它们共享相同的对象(地址),所以修改形参对象的属性值,也会影响到实参的属性值。
var obj = {x : 1};
function foo(o) {
o.x = 3;
}
foo(obj);
console.log(obj.x); // 3, 被修改了!
总之:
js中的引用类型“”传引用“”实际是传共享,
即:地址的副本,所以在函数里面对地质的修改不会影响到外面,因为是地址的 副本
但是,又因为地址指向的是同一个内容,所以对“内容”即对象属性的修改会影响到外面。