美文网首页
let、const

let、const

作者: XinYuan2018 | 来源:发表于2019-05-15 17:40 被阅读0次

let

  1. 不存在变量提升,有暂时性死区,引用前需提前声明
  2. 同一作用域内不能重复声明
  3. 其声明的的全局变量不属于顶层对象的属性

const

  1. 不存在变量提升,有暂时性死区,引用前需提前声明
  2. 只能在声明时赋值
  3. 同一作用域内不能重复声明
  4. 不能重复赋值
  5. 赋值为基本类型,则不能修改;赋值为引用类型,则可修改(若希望将对象冻结,可以使用Object.freeze()方法)
  6. 其声明的的全局变量不属于顶层对象的属性

tips
变量提升:

类比函数声明提升:函数声明来定义函数即可实现函数声明提升,这样,我们可以先调用函数,后声明函数;而函数表达式方法不会实现函数声明提升,这样,如果先调用函数,后声明函数,则会抛出错误。那么可以以此类推,var定义变量:可以先使用,后声明;而let、const定义变量:只可先声明,后使用

暂时性死区:

ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)

块级作用域:

ES5 只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景。第一种场景,内层变量可能会覆盖外层变量。第二种场景,用来计数的循环变量泄露为全局变量。
ES6的块级作用域,允许块级作用域的任意嵌套,内层作用域可以定义外层作用域的同名变量。块级作用域的出现,实际上使得获得广泛应用的立即执行函数表达式(IIFE)不再必要了。

顶层对象:

顶层对象,在浏览器环境指的是window对象,在 Node 指的是global对象。ES5 之中,顶层对象的属性与全局变量是等价的。ES6 之中,为了保持兼容性,var和function声明的全局变量,依旧是顶层对象的属性;let、const、class声明的全局变量,不属于顶层对象的属性。

相关文章

  • ES6

    let const let const 没有变量提升let 块级作用域const 常量 模板语言, restfu

  • 工作中常用的 ES6 语法

    变量声明 let 和const 不用var, 用const声明只读变量,let声明变量。let和const都是块级...

  • let和const

    新的赋值语句let和const let和const命令

  • 关于ES6以及ES6常用的方法

    1、变量声明let和const let表示变量、const表示常量。let和const都是块级作用域。 2、模板字...

  • ES6简单总结篇

    一、let const 特性: 1、let const 声明的变量只在他所在的代码块内有效 2、let const...

  • ES6需要记忆理解的地方

    let和const命令 1、let和const均无变量提升。2、let变量指向的地址可变,const指向的地址不可...

  • ES6这些就够了

    1.变量声明const和let let表示变量、const表示常量。let和const都是块级作用域 2.模板字符...

  • (JS)

    ES6 let、const和var的区别 let和const声明变量不存在变量提升 let和const不能重复声明...

  • 【JS】从ECMA学习let、const、var变量声明与声明提

    let、const、var是JS中的声明关键字 let和const 我们熟知的let和const的特性,常见的就有...

  • Android菜鸟学习js笔记 一

    一、var,const,let区别? var 变量,const 常量,let块级变量。

网友评论

      本文标题:let、const

      本文链接:https://www.haomeiwen.com/subject/dpdpaqtx.html