JavaScript中的值传递和引用传递

2018/08/07

先说说我对这两个传递的理解吧

  • 值传递
    将变量的值重新复制到另外一个变量上,两者之间并没有其他任何的关联
  • 引用传递
    将变量指向堆内存中的指针复制到另外一个变量上,简单的说就是其中一个值发生了改变,另外一个也改变了。(这只是我个人浅浅的理解)
  1. 值传递
    在JavaScript中5种基本数据类型都是按值传递的。
let foo = 1
let bar = foo

bar = 2
console.log(foo) // foo = 1
  1. 引用传递
    那么还有一个Object的数据类型肯定是按照引用传递的了
let foo = {
  message: 'i am message'
}
let bar = foo

bar.message = 'no, i am text'
console.log(foo) // foo = {message: "no, i am text"}

//我女朋友看小说把眼睛都看花了真的拼啊 2018/08/07 23:19

2018/08/08

继续昨天的说:
在我刚刚看到引用传递时,我以为是如下这个例子的

let foo = {
  message: 'i am message'
}
let bar = foo

bar = 'no, i am text'
// [我以为它会变成'no, i am text']
//结果显然我是错的
console.log(foo) // foo = {message: 'i am message'}
console.log(bar) // bar ='no, i am text'

感觉就是当bar被重新赋值时,原来指向foo的指针就断开了。 我对这个的理解非常差,希望有大神看到的时候可以指正我。

参数传递

红宝书中说到: ECMAScript中所有函数的参数都是按值传递的。

参数传递可以传递基本数据类型和引用数据类型。

  • 传递基本数据类型时,是将被传递的值复制给了一个局部变量。
  • 传递引用数据类型是,是将被传递的值在内存中的地址复制给了局部变量

常见的Demo就不记录了, 记录一个红宝书中的例子

function setName(object) {
  object.name = 'Jack'
  object = new Object() //我感觉在此处与上文相似,指向原object的指针断开了,指向了新的元素
  object.name = 'Owen'
}

let person = new Object()
setName(person)
console.log(person.name)

//我女朋友又不睡觉,太可恶了每天都要我监督她 2018/08/08 23:30

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