let/const

作者: 卡卡的尼奇 | 来源:发表于2019-05-05 11:21 被阅读0次

let/constES6新增的声明变量的关键词,和ES5var相比有以下几个特点

  1. 基本使用
  2. 块级作用域
  3. 不存在变量提升
  4. 不允许重复声明
  5. 暂时性死区

基本使用

let用于声明一个变量
const用于声明常量,const一旦声明之后,其值就不能修改,所以这就意味着const必须在声明的同时进行初始化

const a // Uncaught SyntaxError: Missing initializer in const declaration

const不能被修改的本质是保证了其声明的常量所指向的内存地址保存的数据不得改变,也就是说对于简单类型(指向的内存地址保存了值)值不得改变,对于引用类型(指向的内存地址保存了对象的引用)则是引用的对象不得改变为引用其他对象,被引用的对象本身是可以修改的

const a = 'a string'
a = 'a new string' // Uncaught TypeError: Assignment to constant variable.

const b = { name: 'Tom' }
b.age = '28'
console.log(b) // {name: "Tom", age: "28"}
b = { name: 'Jack' } // Uncaught TypeError: Assignment to constant variable.

在实际的项目中,常量声明使用const,好处是可以V8引擎对const有优化,而且可以避免不小心改变值。对于某些不可改变引用的对象,推荐也使用const进行约束

块级作用域

ES5中,js不存在块级作用域,

不存在变量提升

var存在变量提升,也就是可以先使用后声明,在声明之前使用时其值为undefined

console.log(`a = ${a}`) // a = undefined
var a = 5

console.log(`b = ${b}`) // Uncaught ReferenceError: b is not defined
let b = 5

不允许重复声明

在相同的作用域内,let/const不允许重复声明同一个变量

{
  var a = 5
  var a = `a string`
  console.log(a) // a string
}

{
  let a = 5
  let a = `a string` // Identifier 'a' has already been declared
}

暂时性死区

ES6明确规定,如果区块中存在let/const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。

if (true) {
  // TDZ开始
  tmp = 'abc'; // ReferenceError
  console.log(tmp); // ReferenceError

  let tmp; // TDZ结束
  console.log(tmp); // undefined

  tmp = 123;
  console.log(tmp); // 123
}

由于死区会抛出异常,所以在项目中一定要先声明后使用

相关文章

  • 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/vdlcoqtx.html