亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于JS的堆和棧的理解

標簽:
JavaScript

一、  堆(heap)和栈(stack)

栈(stack)会自动分配内存空间,会自动释放。堆(heap)动态分配的内存,大小不定也不会自动释放

二、数据类型

1、基本类型(简单的数据段,存放在栈里面,占固定大小的空间)

基本类型有:Undefined、Null、Boolean、Number 和String。这些类型在内存中分别占有固定大小的空间,他们的值保存在栈空间,我们通过按值来访问的。

2、引用类型(多个值构成的对象,保存在堆内存中,包含引用类型的变量实际上保存的不是变量本身,而是指向该对象的指针)

引用类型,值大小不固定,栈内存中存放地址指向堆内存中的对象。是按引用访问的。栈内存中存放的只是该对象的访问地址,在堆内存中为这个值分配空间。由于这种值的大小不固定,因此不能把它们保存到栈内存中。但内存地址大小的固定的,因此可以将内存地址保存在栈内存中。 这样,当查询引用类型的变量时, 先从栈中读取内存地址, 然后再通过地址找到堆中的值。对于这种,我们把它叫做按引用访问。

三、数据销毁

基本数据类型在当前执行环境结束时销毁,而引用类型不会随执行环境结束而销毁,只有当所有引用他的变量不存在时这个对象才会被回收机制回收。

四、引用类型最好不要比较

举个栗子:

var a={name:"ayi",age:21};//初始化一个对象(引用类型)

var obj1=a,obj2=a;//将obj1和obj2指向同一个地址,都为a的地址

obj1.name="aha";//改变obj1的name的值,这个时候obj1的地址并没有变化

console.log(obj1==obj2)//这个时候打印的值为true,因为他们还是指向同一地址引用。

obj1={name:"aiyo"};//这个时候obj1指向了另外一个地址引用

console.log(obj1==obj2)//false

五、项目中遇到的问题

···

  var arry1=[

{name:"zhang",age:23,key:"12"},

        {name:"as",age:23,key:"123"},

        {name:"sd",age:23,key:"124"},

        {name:"df",age:23,key:"125"},

        {name:"fd",age:23,key:"126"},

        {name:"as",age:23,key:"127"},

        {name:"as",age:23,key:"1276"},

        {name:"as",age:23,key:"533"}];

    var item={name:"as",age:23};

    function btnClick() {

// var _item=JSON.parse(JSON.stringify(item))

         var _item=item;

        for(var i=0;i

if(_item.name==arry1[i].name){

_item.key=arry1[i].key+"1"http://item本来没有key,现在使得他的key的地址指向arry1[i].key+"1"

//第二次单击时,改变item.key的地址,之前push到arry1的item.key的地址也变成现在的,所以两次是一样的。

//想要他们的引用地址不一样,可以使用JSON.parse(JSON.stringify(value))套用

            }

}

arry1.push(_item)

console.log(arry1)//单击两次以后,发现打印出来最后两个元素的key值是一样的

    }

在赋值的时候,其实改变的是引用地址,想要改变他的地址以及值,可以使用JSON.parse(JSON.stringify(value))套用



作者:张小娃
链接:https://www.jianshu.com/p/3ccbb52a15df


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消