說到js函式引數傳遞的時候,我們經常會說普通型別(int,string等)是複製傳遞,複雜型別(array,object等)是引用傳遞。
看下js裡面的引用傳遞:
var obj1 =
function
test
(obj)
return obj;
}obj2 =
test
(obj1)
;console.
log(obj1)
;console.
log(obj2)
;//?
//?
不執行上述**,想下結果是什麼。
如果執行的結果跟預想的不一樣,接著往下看。
/*
obj1是乙個物件,有乙個位址addr1指向這個物件
我們進行obj1.name = '***x'時,其實是通過這個addr1在操作這個物件
*/var obj1 =
function
test
(obj)
return obj;
}//obj2也是指向addr2
obj2 =
test
(obj1)
;console.
log(obj1)
;console.
log(obj2);//
////
所謂的引用傳遞,其實是「複雜型別記憶體位址的複製傳遞」。 JS基礎 引用型別的引數傳遞
ecmascript中所有函式的引數都是按值傳遞的。可以把ecmascript函式的引數想象成區域性變數。ecmascript中所有函式的引數都是按值傳遞的。也就是說,函式的傳參,就和基本型別變數的複製一樣,而引用型別值的傳遞,則如同引用型別變數的複製一樣。這裡可能會使很多人感到困惑,因為訪問變數有...
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中函式引數值傳遞和引用傳遞
也許大家對於函式的引數都不會太在意,簡單來說,把函式外部的值複製給函式內部的引數,就和把值從乙個變數複製到另乙個變數一樣。深入研究,你會發現其實沒那麼簡單,這個傳參是要分倆種情況 其實這是個錯誤的說法,ecmascript中所有函式的引數都是按值傳遞的 高程3 原話,之所以這裡說倆種,是因為結合引用...