按引用傳遞(call by reference)
函數(shù)所傳的參數(shù),形參不再是實(shí)參的副本揽惹,而是實(shí)參的隱式引用被饿,此時(shí)修改形參的值,實(shí)際上就會(huì)影響到實(shí)參的值
按值傳遞 (call by value)
常見的函數(shù)的形參是被調(diào)用時(shí)所傳實(shí)參的副本搪搏。修改形參的值并不會(huì)影響到實(shí)參
var a = 1;
function test(x){
x = 10
}
test(a);
// a 是實(shí)參狭握, x是形參即a的副本
// 修改了x的值并不會(huì)影響到a
在JavaScript的世界里有這樣一種情況,形參傳遞對(duì)象疯溺。
var obj = {a:1};
function test(opt){
opt.a = 10; //修改屬性值
opt.c = 20; //新增屬性值
opt = 100;
}
test(obj);
此時(shí) opt 作用形參论颅,并且傳遞一個(gè)對(duì)象實(shí)參,修改了形參的屬性opt.a或新增了屬性opt.c囱嫩,則解釋器會(huì)認(rèn)為 opt 是隱式傳參恃疯,即引用傳遞所以此時(shí)obj輸出為 {a:10};
但是墨闲,如果將opt以基本類型(不可變)賦值opt=100那么此時(shí)解釋器會(huì)認(rèn)為opt是按值傳遞今妄,所以opt不會(huì)影響到外部的obj對(duì)象
據(jù)說,coder們給了它一個(gè)高大上的稱呼叫:按共享傳遞
javascript都是按值傳遞方式