js按值及引用傳遞中遇到的小問題

2022-04-22 07:16:50 字數 794 閱讀 2752

有人閒的蛋疼,非要在函式中使用如下方式傳值,尼瑪一下把我搞糊塗了。於是決定發揮打破沙鍋問到底的精神搞清楚它。

var a = 1,b = , c = {};

function f(a, b, c)

}**如上,a是乙個數字型別,b是乙個陣列型別,c是個物件型別。

當作引數傳入的過程是:

a這個數值型別將記憶體中的一塊標識名為a但填充值為1的記憶體塊複製乙份並標識為a,這個a雖跟外部變數a同名,但實際是另一塊,只可在函式內部訪問到。

緊接著因為未做變數宣告,那作為變數的a此時不是全域性屬性a,即外部宣告的a變數,而是形參變數。

對形參變數進行賦值,賦值為乙個陣列,改形參變數的值被替換成了乙個新陣列的位址值,建立起了對新陣列的引用關係。

而形參變數在外部仍舊是不可見的。雖然形式上如同內部未宣告變數,按照js的邏輯應洩露到全域性環境中去。但卻沒有。如果將內部的a,b,c輸入,如下:

var a = 1,b = , c = {};

function f(a, b, c)

console.log(a, b, c);

}結果;類似如下:

也即他輸出了形參被賦值後的結果。

改成如下:

var a = 1,b = , c = {};

function f(x, y, z)

}此時函式f內部的a,b,c就成為了未宣告的變數,他們會洩露到全域性環境中去。此時a中的值被替換成了陣列的位址值,成了引用型別。

JS按值傳遞與按引用傳遞小結

js的基本型別,是按值傳遞的。var a 1 function foo x foo a console.log a 仍為1,未受x 2賦值所影響 再來看看物件的傳遞 var obj function foo o foo obj console.log obj.x 3,被修改了 var obj fun...

js函式傳參是按值傳遞還是按引用傳遞?

基本型別 引用型別 閒扯完了,開始寫今天要總結的基礎知識。基本型別 undefined null boolean number string五種 簡單的資料段 引用型別 object 由多個值構成 兩種型別在使用上的區別 複製變數 這塊好理解,看乙個例子的對比就秒懂 基本型別 var num1 5 ...

PHP中物件是按值傳遞還是按引用傳遞?

1.首先,什麼是按值傳遞和按引用傳遞?按值傳遞就是僅僅把值傳遞過去,相當於傳遞的是值的拷貝,而按引用傳遞傳遞的是記憶體的位址。按引用傳遞的特點 a 2 b a 按引用傳遞 a 1 echo b 1 b 3 echo a 3 2.現證明php中物件不是按引用傳遞 class test test1 ne...