1. 程式人生 > >JS引用傳遞和值傳遞

JS引用傳遞和值傳遞

本部落格詳細解釋JS值傳遞和引用傳遞以及二者的區別。
我們先來解釋一下這兩個的基本概念吧。
函式呼叫中,傳遞是一個數值,我們稱為 “值傳遞”。
函式呼叫中,傳遞是物件,一般稱為 “引用傳遞”。
現在這裡總體上說明,這二者的本質區別就在於傳遞的資料型別不一樣,值傳遞傳遞的是一個值,而引用傳遞傳遞的是一個物件。
看一下程式碼以及程式碼中的註釋。

一、引入

function func(a)
{
    a++;
}

// 因為函式都沒有呼叫,所以找不到 a
console.log(a);
//結果明顯是undefined了。

//所以看下面兩個例子。

二、值傳遞

var a = 5
; function func(a) { // 函式中開闢了一個空間 a == 5 // a==6 a++; } func(5); // 結果,函式沒有改變到 外部 a 的值,所以,結果是 5 console.log(a); // 函式呼叫中,傳遞是一個數值,我們稱為 “值傳遞” // 特點: 有多個不同的空間,空間都是在棧中的 // 所以 修改函式中的空間,對外部空間是沒有影響的

三、引用傳遞

var a = 5;
function func()
{
    // 開闢函式 的空間
    //  函式中沒有 a 的空間
    // 所以,系統會自動向外面搜尋
    // 這裡是對外部的變數進行修改
a++; } func(5); // 因為函式中修改了外部的變數 a,所以,值發生改變了,是 6 console.log(a); // 函式呼叫中,傳遞是物件,一般稱為 “引用傳遞” // 特點: 實在存資料的空間只有一份

詳細的說明我都在程式碼中註釋說明了,希望對你有幫助吧。
歡迎指點指點指正。