我們都知道在 ECMAScript 中,數據類型分為原始類型(又稱值類型/基本類型)和引用類型(又稱對象類型);這里我將按照這兩種類型分別對函數進行傳參,看一下到底發(fā)生了什么。

參數的理解

首先,我們要對函數的參數有一個了解:

形參就是函數內部定義的局部變量;

實參向形參傳遞值的時候,就是一個賦值操作,把實參的值直接復制一份給形參。

原始類型參數傳遞

示例1

var a = 1; function f(b) {
      a = 3;
  } f(a); console.info(a); // 3

示例1中的代碼比較簡單,解析如下:

  1. 首先,我們定義了一個變量 a,給它賦值為 1;又定義了一個函數 f,函數 f 的形參是 b(此時,相當于在函數 f 里定義了一個變量 var b; 它的值現在是 undefined);
  2. 調用函數 f(a)把 a 作為實參傳入。這里可以理解為,給 b 進行了一次賦值操作 b = 1;
  3. 接下來繼續(xù)執(zhí)行代碼 a = 3;注意:在函數體里邊,出現了一個變量 a ,但是它沒有用 var 關鍵字定義,所以,它是一個全局作用域的變量,不是這個函數的局部變量,而在一開始,我們就定義了這樣一個變量 a,所以在這里就是對之前的 a 進行的又一次賦值操作,把 a 從之前的 1 變成了 3;
  4. 執(zhí)行完 f(a) 之后,把全局變量 a 的值改變了,所以,當我們輸出 a 查看它的值時,就得到了 3 ,而對于函數的形參 b 根本沒有進行任何操作而已。

示例2

var a = 1; function f(a) {
 
        
		

網友評論