JS 直接赋值与引用式赋值
在JavaScript中基本(简单)数据类型都是传值赋值,复杂数据类型都是引用赋值(传地址)
基本概念
- 简单数据类型:在存储变量中存储的是值本身:string number boolean undefined null
- 复杂数据类型:在存储时变量中存储的仅仅是地址,因此叫,通过new关键字创建的对象:Object,Array,Date等
- 简单数据类型 是存放在栈里面,里面直接开辟一个空间存放的是值
=> var a=b; //a与b无关
- 复杂数据类型 首先在栈里面存放
地址
,然后这个地址
指向堆里面的数据=> var a=b; //a与b联动
传值赋值(值传递)
function test(i){
console.log(i)
i = 2 // a与i 没有关系
}
var a = 1
test(a) //传入 简单数据类型 a 参数
console.log(a) // 1
- 当传入的是简单数据类型的参数时:就是复制了栈区的内容给i而已,i与a之间没有关系。
引用赋值(传地址)
function test(person) {
console.log(person)
person.age = 26; // 导致p1地址指向的内容堆区发生改变
}
const p1 = {
name: 'yck',
age: 25
}
test(p1) // 传入了复杂类型(对象)的地址
console.log(p1) // {name:'yck',age:26}
- 当传入的参数为复杂数据类型时:复制了
栈区
的地址给函数,函数可通过地址修改堆区
数据。
图像示例
为了更形象一点,可以尝试看看以下内容
- 传值赋值(值传递)
- 引用赋值(传地址)
小结:只是小结了这方面小小的内容,还有许多更深的知识点需要补充,希望各位大佬多多指教,也希望这篇文章能帮助到你~