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