js--函數傳值

  • 摘自JS高級程序-第三版
JS中所有的函數的參數都是按值傳遞的!!!
  • 雖然訪問變量有按值和按引用傳遞兩種,但是函數參數的傳遞只能按值傳遞。具體的方法是:

  • 如果是基本類型的值,就將值復制給函數參數,其實也就是arguments對象中的一個元素。

  • 如果是引用類型的值,就將這個值在內存中的地址復制給函數參數。

  • 在函數內部,函數參數實際上是一個局部變量。

  • 如果函數參數保持傳入的引用地址不變,則在函數內部改變函數參數所指向的對象的值,在函數外訪問時該對象也會隨之改變。如果函數參數中途被改變過,則會指向新的對象,丟失原來的地址引用,此時改變函數參數所指對象的值,不會對函數外的對象造成改變。

  • 代碼對比如下:
    function setName(obj) {
    obj.name = "Nicholas";
    }
    var person = new Object();
    setName(person);
    alert(person.name); //"Nicholas"

  • function setName(obj) {
          obj.name = "Nicholas";
          obj = new Object();
          obj.name = "Greg";
      }
      
      var person = new Object();
      setName(person);
      alert(person.name);    //"Greg"
    
  • 解析:上述中,在函數內部修改了形參的值,形參指向了一個新創建的對象,但原始的引用仍未改變。obj與person所引用的已經不再是同一個對象,所以兩者的修改互不影響。而且obj指向的對象是一個局部對象,會在函數執行完畢后立即被銷毀。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容