JS 直接赋值与引用式赋值

544 阅读1分钟

image.png

JS 直接赋值与引用式赋值

@[TOC]

在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 // ai 没有关系
}
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}
  • 当传入的参数为复杂数据类型时:复制了栈区的地址给函数,函数可通过地址修改堆区数据。

图像示例

为了更形象一点,可以尝试看看以下内容

  1. 传值赋值(值传递)

image.png

image.png 2. 引用赋值(传地址)

image.png

image.png

小结:只是小结了这方面小小的内容,还有许多更深的知识点需要补充,希望各位大佬多多指教,也希望这篇文章能帮助到你~