JavaScript传值:传值or传引用

780 阅读1分钟

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

我们可以这样理解传共享

  • 对对象的属性进行修改时 调用者和被调用者之间共享这个对象 表现出来就像传引用

  • 对不可变的基本类型进行修改或者给对象赋值新的对象时 调用者和被调用者引用的已经不是同一个对象,表现出来就像传值