js 參數傳遞方式:按值傳遞

訪問變量有按值和按引用兩種方式,
基礎數據類型按值訪問,引用數據類型按引用(即指針或地址)訪問。
但參數只能按值傳遞,
在向參數傳遞基本類型的值時,被傳遞的值會被複制給命名參數,引用類型時,傳遞的是它指針內存儲的值
借用網上的一個例子

function setName(obj){  
  obj.name="nick";  
  console.log('第一次'+obj);
  obj=new Object(); // 類似於obj = 2;  
  // 此處實例化一個新的對象或將obj = 2,即切斷了它與原先地址的聯繫,擁有一個新的指針,這個對象爲局部變量
  // 只是這個obj和person的指針的值是一樣的,但是兩者是兩個對象,對obj的操作並不會影響到person
  console.log('第二次'+obj);
  // 給這個新的對象添加屬性
  obj.name="greg";  
    console.log('第三次'+obj);
}  

var person=new Object();  
setName(person);  
console.log('第四次'+person.name);  
第一次nick
第二次undefined
第三次greg
第四次nick

由此可以證明是按值傳遞,若是按引用傳遞,則第三次和第四次應該結果一樣,
一段時間過後,再次來看這個,發現寫的有些問題:
例如:

var person = {
    name:'tom',
    sex:'max'
};
function changeName(obj){
// 此處並沒有創建新的對象,即沒有切斷obj和person 的聯繫,即我們操作的就是原始的person的指針的值
    obj.name = 'casy';
    console.log(obj);
}
changeName(person);
// 打印出來的是{name: "casy", sex: "max"}
console.log(person);
// 此時打印出來的{name: "casy", sex: "max"}
因爲操作的是同一個對象,所以兩次打印的值一致
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章