Javascript深入之执行上下文栈和变量对象

  1. 函数提升

在这里插入图片描述

2.变量提示 (因为是同一个变量,所以只提示一次)

在这里插入图片描述

3:声明优先级,函数 > 变量

在这里插入图片描述

需要注意的是,同一作用域下存在多个相同的函数声明的时候,后面的会替换前面的

  1. 变量的存放 首先我们知道内存有栈和堆
  2. 基本数据类型,—>保存在栈中,因为这些类型在内存中分别占有固定的大小,通过值来访问;基本数据类型包含6种,undefined ,Null,Boolean,Number,String,Symbol;
  3. 引用数据类型,---->保存在堆中,因为这些值的大小不固定,因此不能把他们保存在栈内存中,但内存地址大小是固定的,因此保存在栈中,通过栈中的键,对应的地址,访问堆中的数据…当查询引用类型的时候,先从栈内存中读取,然后通过地址在堆内存中寻找

在这里插入图片描述

2.1小练习

var a = 30;
var b = a ;
b = 40;
那么此时a的值多少
var a = {name:"许"};
var b = a ;
b.name = "蔡";
那么此时a.name的值多少
var a = {name:"许"};
var b  = a;
a = null;
那么此时b的值多少

2.1.1 第一问 此时a的值为30;;;因为是存放在栈内存空间中,赋值互不干扰
2.1.2 第二问 此时a.name的值为蔡;;因为a是一个对象,a存放在栈内存中,值是一个地址.地址的方向在
堆内存中,而b=a;实际上只是把地址赋值给了b;;;;所有b修改的时候,修改的是地址对面的
的对象,同时a的也被修改了,都是指向同一个对象
2.1.3 第三问, 此时b的值还是{name:“许”}; 开始的时候a的值是一个地址,后面被赋值成了null.
且b=a;在a没有改变成null之前,已经把地址给了b,所有b的地址还存在 ;;;跟第一问差不 多,只是存取的值不同而已,不要被误导了

3.内存空间管理
javascript的生命周期是
1.分配你所需要的空间
2.使用分配到的内存(读,写)
3.不需要时将其释放
javascript有自动垃圾回收机制,最常用的是标记清楚的算法,使用a=null;其实仅仅只是做了一个释放引用的操作,让a原本的值失去引用,脱离执行环境,这个值会在下一次垃圾回收机制的操作时被找到并释放
在局部作用域中,当函数执行完毕,局部变量也就没有引用内存的的必要了,垃圾回收器会做出判断并回收,但是全局变量很难判断什么时候回收,所有子开发中,应该尽量少用全局变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值