ES6 let var const


let 允许你声明一个作用域被限制在块级中的变量、语句或者表达式
    let绑定不受变量提升的约束,这意味着let声明不会被提升到当前
    该变量处于从块开始到初始化处理的“暂存死区”。

var 声明变量的作用域限制在其声明位置的上下文中,而非声明变量总是全局的
    由于变量声明(以及其他声明)总是在任意代码执行之前处理的,所以在代码中的任意位置声明变量总是等效于在代码开头声明
    
const 声明创建一个值的只读引用 (即指针)
    这里就要介绍下 JS 常用类型 
    StringNumberBooleanArrayObject、Null、Undefined
    其中基本类型 有 Undefined、Null、BooleanNumberString,保存在栈中;
    复合类型(引用类型) 有 ArrayObject ,保存在堆中;
    
    基本数据当值发生改变时,那么其对应的指针也将发生改变,故造成 const申明基本数据类型时,
    再将其值改变时,将会造成报错, 例如 const a = 3 ; a = 5 时 将会报错;
    但是如果是复合类型时,如果只改变复合类型的其中某个Value项时, 将还是正常使用;



下面说一下基本类型和引用类型的存储方法:  



基本类型:   基本类型在存储的时候系统已经知道它的大小,给它们分配固定大小的栈空间,通过按值来访问。


引用类型:



   引用类型,值大小不固定,栈内存中存放地址指向堆内存中的对象。是按引用访问的。

   栈内存中存放的只是该对象的访问地址,在堆内存中为这个值分配空间。由于这种值得大小不固定,因此不能
将它们保存在栈中。但内存地址大小是固定的,因此可以将内存地址保存在栈中。



为什么会有栈内存和堆内存之分?    

通常与垃圾回收机制有关。为了使程序运行时占用的内存最小。    

当一个方法执行时,每个方法都会建立起自己的内存栈,在这个方法内定义的变量将会逐个放入这块内存里,随着 方法执行的结束,这个方法的内存栈也将自然销毁。因此,所有在方法中定义的变量都是放在栈内存中的。 当我们在程序中创建一个对象时,这个对象将被保存到运行时数据区中,以便反复利用(因为创建对象的成本通常都比较大),这个运行时数据区就是堆内存。堆内存中的对象不会随方法的结束而销毁,即使这个方法结束后,这个对像还可能被其它引用变量所引用,则这个对象依然不会被销毁,只有当一个对象没有任何变量引用它时,系统的垃圾回收机制才会在合适的时候回收它。

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值