論JS函式傳參時 值傳遞與引用傳遞的區別

2021-10-03 03:12:13 字數 1294 閱讀 3706

值傳遞:值傳遞的資料為基本資料型別,基本資料型別在記憶體中存放的是數值本身;值傳遞為單向傳遞,只能由實參傳遞給形參。

引用傳遞:引用傳遞的資料為複雜資料型別,複雜資料型別在記憶體中存放的是位址,再根據位址找到數值。

先舉兩個簡單的例子:

基本資料型別:number、string、boolean、null、undefined

基本資料型別採用值傳遞

例1:number型別

解釋:a和b的值不一樣是因為:基本資料型別在記憶體中存放的是數值本身,將a的數值直接拷貝給了b,此時b=10,緊接著,又將20賦給了b,對b進行了覆蓋,此時b=20,可以看出對b的操作並沒有影響到a的值.

複雜資料型別:object(陣列、物件)、function

複雜資料型別採用引用傳遞

例2:array

解釋:兩個陣列的值一樣是因為:arr1將指向資料的位址拷貝給了arr2,此時arr1和arr2擁有相同的位址,arr1和arr2的位址指向了同一組資料,則改變arr2中的資料,arr1中的資料也會發生變化

js函式傳參時:值傳遞與引用傳遞的區別

值傳遞為單向傳遞,只能由實參傳遞給形參,形參無法改變實參的值。

例3:值傳遞

解釋:a1是實參,a2為形參,基本資料型別在記憶體中存放的是數值本身,函式呼叫時,將實參a1的數值傳遞給了形參a2,在函式中,給a2重新賦值,a2的值為20並返回,沒有影響到a1的值.

例4:引用傳遞

解釋:obj1為實參,obj2為形參,函式呼叫時,obj1將存放資料的位址傳遞給了obj2,此時obj2存放的是位址,不是值,則obj1和obj2擁有相同的位址,obj1和obj2的位址指向了同一組資料,在函式中,改變了obj2指向的資料,obj1中的資料也會發生同樣的變化。

注意:在定義函式時,若沒有出現函式呼叫時,形參並不占用記憶體單元,只有在呼叫函式時,系統才會為其開闢空間,在呼叫結束後,形參所佔記憶體單元會被銷毀。

論js函式傳參時 值傳遞與引用傳遞的區別

值傳遞的是簡單的資料型別 引用傳遞的是複雜型別的資料。在記憶體中是分為兩個區域 棧 和 堆。棧用來存放位址,堆是用來存放值的。值傳遞的資料不分位址和值 位址 值 引用傳遞的資料區分位址和值,找到位址後需要根據位址說明的情況才能找到相對應的值。值傳遞的資料位址和值是同乙個內容,因此在拷貝之後,改變新的...

JS函式傳參時 值傳遞與引用傳遞的區別

簡單來說,把函式外部的值複製給函式內部的引數,就和把值從乙個變數複製到另乙個變數一樣。然而並不是這樣分,應分為兩種 值傳遞引用傳遞 在向引數傳遞基本型別的值時,被傳遞的值會被賦值給另乙個變數。如下面 function fn num var a 20 var b fn a 按值傳遞 num b con...

逆戰 論JS函式傳參時 值傳遞與引用傳遞的區別

論js函式傳參時 值傳遞與引用傳遞的區別toc 函式呼叫中,傳遞是乙個數值,我們稱為 值傳遞 函式呼叫中,傳遞是物件,一般稱為 引用傳遞 這二者的本質區別就在於傳遞的資料型別不一樣,值傳遞傳遞的是乙個值,而引用傳遞傳遞的是乙個物件。1.值傳遞 var num 5 function fn num fn...