傳遞參數

  ECMAScript中所有函數的參數都是按值傳遞的。

   因爲訪問變量有按值和按引用兩種方式,而參數只能按值傳遞,這可能會讓我們感到困惑。    

   在向參數傳遞基本類型的的值時,被傳遞的值會被複制給一個局部變量(即命名參數)。在向參數傳遞引用類型的值時,會把這個值在內存中的地址複製給一個局部變量,因此,這個局部變量的變化會反映在函數的外部。爲了證明對象是按值傳遞的,我們看下面的一個例子:

   fuction setName(obj){

   obj.name="Nicholas";

   obj=new Object();

   obj.name="gred";

}

   var person=new Object();

   setName(person);

   alert(person.name); //Nicholas

在把person傳遞給setName()後,其name屬性被設置成爲“Nicholas”。然後又將一個新的對象賦給變量obj,同時將其name屬性設置爲“gred”。如果對象是按照引用傳遞的話,那麼person就會自動的被修改爲指向其name屬性爲“gred”的新對象。但是,當接下來再訪問person時,顯示的值仍然是“Nicholas”。這就說明了即使在函數內部修改了參數的值,但原始的引用仍然不變。實際上,當在函數內部重寫obj時,這個變量的引用就是一個局部對象了,而這個局部對象會在函數執行完畢時立即銷燬。

  可以把ECMAScript函數的參數想象成爲局部變量。

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