在 ES6之前,ES5中js只有全局作用域和函数作用域,作用域是一个独立的地盘,让变量不外泄出去,但是上例中的变量就外泄了出去,所以此时 JS 没有块级作用域的概念。
全局作用域就是最外层的作用域,如果我们写了很多行 JS 代码,变量定义都没有用函数包括,那么它们就全部都在全局作用域中。这样的坏处就是很容易冲突。

let

ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。

const

  • const声明一个只读的常量。一旦声明,常量的值就不能改变。
  • 对于const来说,只声明不赋值,就会报错。
  • const的作用域与let命令相同:只在声明所在的块级作用域内有效。

const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。

块级作用域

ES5 只有全局作用域和函数作用域,没有块级作用域,
ES6有了 块级作用域的概念,块级作用域即为{ }内的声明。

暂时性死区

ES6 规定暂时性死区和let、const语句不出现变量提升,主要是为了减少运行时错误,防止在变量声明前就使用这个变量,从而导致意料之外的行为。这样的错误在 ES5 是很常见的,现在有了这种规定,避免此类错误就很容易了。
参考资料:
http://es6.ruanyifeng.com/#docs/let
https://segmentfault.com/a/1190000016491581

最新文章

  1. Intent 匹配规则
  2. Css_Backgroud-position(背景图片)定位问题详解
  3. Codeforces Round #274 (Div. 2) B. Towers
  4. ubuntu ssh-keygen Permission denied
  5. iOS开发 - 啰嗦讲解 Runloop
  6. Hbuilder开发移动App(1)
  7. ubuntu14.04 64位 安装JDK1.7
  8. Spring-MVC运行原理
  9. zombodb sql functions 说明
  10. php7 教程
  11. shell 基本命令
  12. 数据库与ORM
  13. Explain结果解读与实践
  14. PAT B1042 字符统计 (20 分)
  15. JDBC及Filter
  16. Oracle ALL DBA表
  17. 使用python编写svn钩子
  18. WPF自适应可关闭的TabControl 类似浏览器的标签页(转)
  19. 无锁的同步策略——CAS操作详解
  20. Kotlin怎样使用Android的Dagger2

热门文章

  1. 待补充 MySQL必知必会第29章--------数据库维护
  2. Git 更新
  3. jquery下拉单选框可左右移动数据
  4. day54——jquery补充、bootstrap
  5. Django框架之第六篇(模型层)--单表查询和必知必会13条、单表查询之双下划线、Django ORM常用字段和参数、关系字段
  6. C语言合并果子-贪心算法
  7. Oracle将小于1的数字to_char后,丢掉小数点前0的解决办法
  8. C# 录音和变调
  9. 阿里巴巴 Java 开发手册 (五) 集合处理
  10. Java之路---Day08