本博文配合 阮一峰 《ES6 标准入门(第3版)》一书进行简要概述 ES6 中的 let 与 const。

历史遗留问题

由于 JS ES3语法中的 var 提升变量、没有块级作用域,因而搞出来了一大波的 "副产品",匿名立即执行函数、闭包,都是 ES3 JS 遗留下来的产物。
所以学过 C 和 Python 再来看 JS ,会感觉很奇怪。
因为 ES6 之前,没有块级作用域,只有通过立即执行函数+闭包的方式造一个局部函数作用域。

let

let的出现解决了 JS 曾经没有块级作用域的问题,即终于在 JS 中出现了正常思维逻辑的语法糖... 即 {} 划分作用域,要想使用变量,必须let声明过该变量。

{
let a = 1
console.log(a)
}

如果在 {}外使用变量,就会报错,因为let{}中声明的是局部变量,仅供这个块级作用域使用。

{
let a = 1
}
console.log(a) //报错

这难道不应该是正常的一种使用习惯么?
然而经常使用 var ES3 语法的 JS 程序员反而会觉得这种用法奇怪 ...

const

用法和let几乎一致,唯一不同的是const只要一次赋值的机会。

{
let a = 1
console.log(a) //
a = 2
console.log(a) //
}
{
const a = 1
console.log(a) //
a = 2
console.log(a) //报错
}

总结

let

  • let的作用域在最近的{}之间
  • 如果在定义变量 let a 之前使用变量 a,那么报错
  • 如果重复定义let a,那么报错

const

  • 包含let的前面三条
  • 只有一次赋值机会,并且必须在声明的时候立马赋值

最新文章

  1. linux Makefile obj-m obj-y
  2. CICS日志---内存问题
  3. .net防止刷新重复提交(转)
  4. C# webservice开发
  5. poj_3122:Pie(二分)
  6. 三星5.0以上机器最简单激活Xposed框架的经验
  7. apache beam ElasticSearchIO 遇到异常后job中断执行 自己定制beam IO
  8. WEB-INF 目录
  9. SpringCloud消息总线
  10. jar运行
  11. Python—集合的操作、文件的操作
  12. gnome extensions 推荐 (fedora 28 常用gnome 插件备份)
  13. unigui作中间件使用
  14. phpize增加php模块
  15. GIF添加3D加速
  16. 【LeetCode】37. Sudoku Solver
  17. Eclips安装SVN插件
  18. 记Thinkpad的一次扩容升级经历
  19. win10 关键错误开始菜单和cortana无法工作 的问题
  20. sql DATEPART() MONTH() convert() cast() dateadd() DATEDIFF() with(nolock)

热门文章

  1. 确保img的宽高比固定
  2. 统计 SQL Server中的 Job 情况
  3. github常见操作和常见错误
  4. 19-3-4 Python进制转换;bool str int三者之间的转换;字符串的索引,切片;for循环的使用
  5. SSM整合时初始化出现异常
  6. VIM Commands
  7. Dinic算法最大流入门
  8. 【BZOJ3991】寻宝游戏(动态规划)
  9. 北京Uber优步司机奖励政策(2月28日)
  10. (AOSP)repo checkout指定版本