zoukankan      html  css  js  c++  java
  • var 、 let 和 和 const 区别及实现原理

    区别:

    • var和let用以变量声明常量,const用于声明只读常量;
    • var声明的变量,不存在快级作用域,在全局范围内都有效,let和const声明的,只在它所在的代码块内有效;
    • let和const不想var存在变量提升现象,所以var定义的变量可以先使用后声明,let和const只能先声明后使用;
    • let声明的变量存在暂时性死区,即只要块级作用域中存在let,那么它声明的变量就绑定了这个区域,不再受外部的影响;
    • let不允许在相同作用域内声明同一个变量;
    • const在声明变量时必须初始化赋值,一旦声明,其声明的值就不允许改变,更不允许重复声明,如const声明了一个复合类型的常量,其存储的是一个引用地址,不允许改变的是这个地址,而对象本事是可变的;

    变量与内存之间的关系,主要由三个部分组成:

    • 变量名
    • 内存地址
    • 内存空间
      JS 引擎在读取变量时,先找到变量绑定的内存地址,然后找到地址所指向的内存空间,最后读取其中的内容。当变量改变时,JS 引擎不会用新值覆盖之前旧值的内存空间(虽然从写代码的角度来看,确实像是被覆盖掉了),而是重新分配一个新的内存空间来存储新值,并将新的内存地址与变量进行绑定,JS 引擎会在合适的时机进行 GC,回收旧的内存空间。const 定义变量(常量)后,变量名与内存地址之间建立了一种不可变的绑定关系,阻隔变量地址被改变,当 const 定义的变量进行重新赋值时,根据前面的论述,JS 引擎会尝试重新分配新的内存空间,所以会被拒绝,便会抛出异常。
  • 相关阅读:
    spring cloud 学习
    python学习-2 python安装和环境变量的设置
    python学习-1 编程语言的介绍
    LIUNX随堂学习-3 权限
    LIUNX随堂学习-2 用户和组,增、删、改、查
    LIUNX随堂学习-1 用户及查看信息
    MySQL--Oracle导出数据csv
    MySQL--mysql中You can’t specify target table for update in FROM clause错误解决方法
    Python--安装
    MySQL--复制
  • 原文地址:https://www.cnblogs.com/0314dxj/p/13994500.html
Copyright © 2011-2022 走看看