再次學習javascript中的參數傳遞

 javascript中的所有函數的參數傳遞都是按照值傳遞的,做了下面測試:

  

function addTen(num){
	num +=10;
	return num;
}

var count = 20;
var result = addTen(count);
alert(cont);		//20
alert(result);	//30
  好吧,上面只是做了基本類型的傳遞,再做個引用類型的傳遞看看:

function setName(obj){
	obj.name="Mark";
}

var person = new Object();
setName(person);
alert(person.name);		//Mark
這樣看起來是引用傳遞,不是值傳遞,那麼再做個測試:

function setName(obj){
	obj.name="Mark";
	obj = new Object();
	obj.name = "David";
}

var person = new Object();
setName(person);
alert(person.name);		//Mark
這個例子與前面一個例子的唯一的區別就是在setName()的函數後面增加 了兩行代碼:一行代碼爲obj重新定義了個對象,另一行代碼爲該對象定義了一個帶有不同值的name屬性。在把persion傳遞給setName()函數後,其name屬性被設置爲Mark,然後將一個新對象賦值給obj,同時其name屬性設置爲David。如果person是按照引用傳遞的,那麼person就會自動被修改爲指向其name屬性值爲David的新對象。但是,當接下再訪問person.name時,顯示的值仍是Mark。這說明即使在函數內部修改了參數的值,但原始的引用仍然保持未變。實際上,當在函數內部重寫obj時,這個變量引用的就是一個局部對象了。而這個局部對象會在函數執行完後被銷燬。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章