1、letjavascript
1.相似var, 但在let
命令所在的代码块内有效。java
2.不存在变量提高。(必须先声明才能使用不然报错)es6
3.暂时性死区。(只要块级做用域内存在let
命令,它所声明的变量就“绑定”(binding)这个区域,再也不受外部的影响。防止变量泄露)浏览器
4.不容许重复声明。函数
2、块级做用域与函数声明this
1.考虑到环境致使的行为差别太大,应该避免在块级做用域内声明函数。若是确实须要,也应该写成函数表达式,而不是函数声明语句。spa
// 块级做用域内部的函数声明语句,建议不要使用 { let a = 'secret'; function f() { return a; } } // 块级做用域内部,优先使用函数表达式 { let a = 'secret'; let f = function () { return a; }; }
2.ES6 的块级做用域必须有大括号code
3、const 命令对象
1.声明一个只读的常量。一旦声明,常量的值就不能改变。ip
2.只在声明所在的块级做用域内有效。
3.一样存在暂时性死区。
5.不可重复声明。
6.扩展: 可使用 Object.freeze (待补充)方法冻结
4、ES6 声明变量的六种方法
ES5 只有两种声明变量的方法:var
命令和function
命令。ES6 除了添加let
和const
命令,后面章节还会提到,
另外两种声明变量的方法:import
命令和class
命令(待补充)。因此,ES6 一共有 6 种声明变量的方法。
5、顶层对象的属性
顶层对象,在浏览器环境指的是window
对象,在 Node 指的是global
对象。
1.ES5 之中,顶层对象的属性与全局变量是等价的。
2.ES6var
命令和function
命令声明的全局变量,依旧是顶层对象的属性;let
命令、const
命令、class
命令声明的全局变量,不属于顶层对象的属性。
var a = 1; // 若是在 Node 的 REPL 环境,能够写成 global.a // 或者采用通用方法,写成 this.a window.a // 1 let b = 1; window.b // undefined