1.javascript
所有函數(shù)的基本類型參數(shù)都是按值傳遞,而Object類型是共享傳遞(call by share)
function change(a,b,c){
a = a +1
b.value = 2
c = {value:3}
}
var a = 1
var b = {value:1}
var c = {value:1}
change(a,b,c)
console.log(a,b,c)//結(jié)果是1,{value:2},{value:2}
a是值傳遞,函數(shù)上下文中的a改變對(duì)外面的a不造成任何影響
b是共享傳遞,函數(shù)上下文中的b和函數(shù)外的b指向的是同一個(gè)對(duì)象(可以理解為指向同一個(gè)地址),函數(shù)內(nèi)b指向的對(duì)象改變了屬性值,函數(shù)外的b也指向的是同一對(duì)象,該對(duì)象屬性值發(fā)生了變化。
c是共享傳遞,函數(shù)外的c指向的對(duì)象,傳給了函數(shù)上下文中的c,函數(shù)執(zhí)行時(shí),剛開始 函數(shù)中的c是指向該對(duì)象的,但是賦值操作后,函數(shù)上下文中的c又指向了另一個(gè)對(duì)象,并沒有對(duì)賦值前的對(duì)象做出改變。
參考了stackflow,鏈接如下