先引用原文
调用函数时,传递给函数的值被称为函数的实参(值传递),对应位置的函数参数名叫作形参。如果实参是一个包含原始值(数字,字符串,布尔值)的变量,则就算函数在内部改变了对应形参的值,返回后,该实参变量的值也不会改变。如果实参是一个对象引用,则对应形参会和该实参指向同一个对象。假如函数在内部改变了对应形参的值,返回后,实参指向的对象的值也会改变:
为了验证,我写了下面的代码:
var x=1,y=2; // x, y 是存储了基本类型的变量
var i=new String("1"), j = new String("2"); // i,j 是存储了引用类型的变量
console.log("x="+x+",y="+y);
function fnTest(a,b){
a=a*2;
b=b*4;
return a+b;
}
console.log("function result="+ fnTest(x,y));
console.log("x="+x+",y="+y);
console.log("typeof x="+typeof(x) + ",typeof y="+typeof(y));
console.log("function result="+ fnTest(i,j));
console.log("i="+i+",j="+j);
console.log("typeof i="+typeof(i) + ",typeof j="+typeof(j));
输出:
x=1,y=2
myJavaScript.js:28 typeof x=number,typeof y=number
myJavaScript.js:29 i=1,j=2
myJavaScript.js:30 typeof i=object,typeof j=object
myJavaScript.js:36 function result=10
myJavaScript.js:37 x=1,y=2
myJavaScript.js:38 typeof x=number,typeof y=number
myJavaScript.js:39 function result=10
myJavaScript.js:40 i=1,j=2
myJavaScript.js:41 typeof i=object,typeof j=object
可以看到,存储引用类型的 i,j 的值并没有变化,这是为什么呢?难道原文有错?
相关分类