值传递和引用传递——javascript

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,链接如下

https://stackoverflow.com/questions/518000/is-javascript-a-pass-by-reference-or-pass-by-value-language?rq=1

你可能感兴趣的:(值传递和引用传递——javascript)