2021-10-29

本文介绍了ES6中let和const的关键特性,包括块级作用域、暂存性死区、变量提升以及const的值不变性。通过实例阐述了两者在声明变量时的区别,总结了ES6的六种变量声明方法:var、function、let、const、import和class。
摘要由CSDN通过智能技术生成


前言

最近在学ES6,故来此记录下自己的学习笔记,主要参考教材为ES6入门(阮一峰)


一、ES6简介

说到ES6,不得不提到ES和JS的关系简单概括就是

ES是JS的规格,规范,而JS则是ES的一种实现方式。

JS 标准委员会决定在每年的6月份发布一个 ES 版本,作为当年的正式版本。这样做的好处有,不需要像5.1,5.2,5.3这样的版本号,只需要用年份来标记即可,即ES2016,ES2017。

ES6,是一个泛指,指代ESMAScript5.1版本以后的 js 的下一代标准,涵盖ES2015,2016,2017等等。

二、let 和 const

1.let

let 有以下三个特性

  • let 所声明的变量只在其所在代码块内有效
  • let不存在变量提升
  • 不允许重复声明
  • 暂时性死区
    暂时性死区(示例):
var tmp = 123;
if (true) {
  tmp = 'abc'; // ReferenceError
  let tmp;
}
// 在代码块内,使用 let 声明变量之前,该变量都是不可用的,
// 这在语法上称为 暂时性死区  (temporal dead zone)
function bar(x = y, y = 2) {
  return [x, y];
}
bar(); // 报错
// 这里因为参数 x 默认值已经等于另一个参数 y ,而此时 y 还未声明
// 属于死区,如果 y 的默认值是 x,就不会报错,因为此时 x 已经声明

总而言之,暂时性死区的本质就是,只要一进入当前作用域,所需要使用的变量就已经存在了,但是不可获取,只有等到变量声明的那一行代码出现,才可以获取和使用该变量。


讲到 let,就不得不说块级作用域
  • ES5 只有 全局作用域 和 函数作用域,没有块级作用域
  • ES6 允许块级作用域的任意嵌套
{{{{
  {let insane = 'Hello World'}
  console.log(insane); // 报错
}}}};
  • 块级作用域和函数声明
    ES5规定,函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域声明
if (true) {
  function f() {}
}

// 情况二
try {
  function f() {}
} catch(e) {
  // ...
} // 既按照es5规定,是违法的

2.const

const 主要要注意,const实际保证的是,变量指向的那个内存地址所保存的数据不得改动,并不是变量的值不得改动。

const obj = {a:"123"};
obj.a = "234";
console.log(a); // "234"

总结

今天,是写博客的第一天,希望后面能够继续坚持下去!最后再总结一下,ES6声明变量的 6 种方法

  • var
  • function
  • let
  • const
  • import
  • class
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值