Asp for JScript陷阱之二:参数的传值问题

var obj1={"a":"1"}

var i=0;

b=function(obj,p){

    obj["a"]="2";

    p=2;

}

b(obj1,i);

alert(obj1["a"]);

alert(i);

上面obj1["a"]输出的值是2,可以看出来对象参数是按引用传送的,而i的值仍然是0,可以看出非对象类型是按值传送的。
上面是基本概念,陷阱在下面:

var obj1={"a":"1"}

b=function(obj){

    var obj2={"c":"2"} 

    obj=obj2;

}

alert(obj1["a"]);

可以看出 obj1["a"] 的值并非是 2,仍然是 1,可以看出传入的对象你只能改变它的值,而不能改变其引用的地址。

正确的设计是:

var obj1={"a":"1"}

b=function(obj){

    /*忽略N行业务代码*/

    var obj2={"c":"2"} 

    return obj2;

}

 

你可能感兴趣的:(script)