JS函数传参是传值还是传引用

来源:互联网 发布:一个简单的c语言程序 编辑:程序博客网 时间:2024/06/17 21:34

基本数值类型不用说,传值;

引用类型:严格来说不能算传引用,在js中叫按共享传递 call by sharing也叫按对象传递、按对象共享传递。最早由Barbara Liskov. 在1974年的GLU语言中提出。该求值策略被用于Python、Java、Ruby、JS等多种语言。
 
该策略的重点是:调用函数传参时,函数接受对象实参引用的副本(既不是按值传递的对象副本,也不是按引用传递的隐式引用)。 

它和按引用传递的不同在于:在共享传递中对函数形参的赋值,不会影响实参的值。如下面例子中,不可以通过修改形参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中的引用类型“”传引用“”实际是传共享,
即:地址的副本,所以在函数里面对地质的修改不会影响到外面,因为是地址的副本
但是,又因为地址指向的是同一个内容,所以对“内容”即对象属性的修改会影响到外面。

0 0
原创粉丝点击