javascript函数传参到底传的啥?
有三种主流说法:
- 传值?
- 传引用?
- 基础类型传值、对象类型传引用?
传值?
首先我们看一下是不是传值
let obj = {name: 'kun'}
function change(o){
let o2 = o
o2.name = 'kun2'
}
change(obj)
console.log(obj) // {name: 'kun2'}如果是传值的话,打印的是kun2,obj属性name变化了,看来传的是引用而不是值
传引用?
我们再看一下这个例子
let obj = {name: 'kun'}
let obj2 = {name : 'kun2'}
function change(o){
o = obj2
}
change(obj)
console.log(obj) // {name: 'kun'}诶?怎么飞事?如果传引用的话,打印{name: 'kun2'}才对啊,这是传值的赶脚。。。仓了天了!!!
基础类型传值,对象类型传引用?
我们知道基础类型传值,上面对象类型有时候传值,有时候传引用。 那JavaScript的参数到底是传得啥呢? 我已经晕了???😵
传共享!!call-by-share
我们可以这样理解传共享
对对象的属性进行修改时 调用者和被调用者之间共享这个对象 表现出来就像传引用
对不可变的基本类型进行修改或者给对象赋值新的对象时 调用者和被调用者引用的已经不是同一个对象,表现出来就像传值