1.javascript
所有函数的基本类型参数都是按值传递,而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)//结果是1,{value:2},{value:2}
a是值传递,函数上下文中的a改变对外面的a不造成任何影响
b是共享传递,函数上下文中的b和函数外的b指向的是同一个对象(可以理解为指向同一个地址),函数内b指向的对象改变了属性值,函数外的b也指向的是同一对象,该对象属性值发生了变化。
c是共享传递,函数外的c指向的对象,传给了函数上下文中的c,函数执行时,刚开始 函数中的c是指向该对象的,但是赋值操作后,函数上下文中的c又指向了另一个对象,并没有对赋值前的对象做出改变。
参考了stackflow,链接如下
网友评论