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

參數(shù)的理解

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

形參就是函數(shù)內(nèi)部定義的局部變量;

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

原始類型參數(shù)傳遞

示例1

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

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

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

示例2

var a = 1; function f(a) {
 
        
        	
        

我想了解如何學(xué)習(xí)

姓名:
手機(jī):
留言: