鍍金池/ 問答/HTML/ JavaScript在函數(shù)內(nèi)修改實(shí)參值的結(jié)論驗(yàn)證出錯(cuò)?

JavaScript在函數(shù)內(nèi)修改實(shí)參值的結(jié)論驗(yàn)證出錯(cuò)?

先引用原文

調(diào)用函數(shù)時(shí),傳遞給函數(shù)的值被稱為函數(shù)的實(shí)參(值傳遞),對應(yīng)位置的函數(shù)參數(shù)名叫作形參。如果實(shí)參是一個(gè)包含原始值(數(shù)字,字符串,布爾值)的變量,則就算函數(shù)在內(nèi)部改變了對應(yīng)形參的值,返回后,該實(shí)參變量的值也不會(huì)改變。如果實(shí)參是一個(gè)對象引用,則對應(yīng)形參會(huì)和該實(shí)參指向同一個(gè)對象。假如函數(shù)在內(nèi)部改變了對應(yīng)形參的值,返回后,實(shí)參指向的對象的值也會(huì)改變:

為了驗(yàn)證,我寫了下面的代碼:

var x=1,y=2; // x, y 是存儲(chǔ)了基本類型的變量
var i=new String("1"), j = new String("2"); // i,j 是存儲(chǔ)了引用類型的變量
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

可以看到,存儲(chǔ)引用類型的 i,j 的值并沒有變化,這是為什么呢?難道原文有錯(cuò)?

回答
編輯回答
萢萢糖

你并沒有修改引用
修改值

var a = 1;
a = 2;

var obj = {name:"123"};
obj = {age:"321"};//直接將指向改變

修改引用內(nèi)容

var obj = {name:"123"};
obj.name = "321";
2017年2月23日 02:38
編輯回答
涼心人
function fnTest(a, b) {//這里相當(dāng)于 let a = i,b = j;
    a = a * 2;
    b = b * 4;
    return a + b;
}

你可以改成

function fnTest(a, b) {
  a.x = 1;
}
2018年6月7日 16:17