JavaScript在函数内修改实参值的结论验证出错?

先引用原文

调用函数时,传递给函数的值被称为函数的实参(值传递),对应位置的函数参数名叫作形参。如果实参是一个包含原始值(数字,字符串,布尔值)的变量,则就算函数在内部改变了对应形参的值,返回后,该实参变量的值也不会改变。如果实参是一个对象引用,则对应形参会和该实参指向同一个对象。假如函数在内部改变了对应形参的值,返回后,实参指向的对象的值也会改变:

为了验证,我写了下面的代码:

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 的值并没有变化,这是为什么呢?难道原文有错?


慕婉清6462132
浏览 546回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript