ES6新增声明变量的方法let命令,const命令。
(ES5只有两种声明变量的方法:var
命令和 function
命令。)
let命令,用来声明变量。
与var声明变量不同于:
1. let声明变量不存在变量提升。(一定要先声明在使用否则报错 )。
2. let命令不允许在同一作用域内,重复声明同一个变量。
3. let声明的变量,只在let
命令所在的代码块内有效。
4. 只要块级作用域内存在let
命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。
ES6的let命令
实际上为JavaScript新增了块级作用域。
关于函数声明
1. 避免在块级作用域内声明函数。(如果需要,应写成函数表达式,而不是函数声明语句)。
2. 允许声明函数,只在使用大括号的情况下成立,如果没有使用大括号,就会报错。
3. 非ES6的浏览器环境下,将块级作用域的函数声明当作let
处理。
const命令,声明一个只读的常量。
与let声明的变量不同于:
1. 常量一旦声明,常量的值就不能改变。(应初始化即赋值,不能留到以后赋值)。
2. 对于复合类型的变量,const
命令可保证变量名指向的地址不变(即不能把变量名指向另一个地址,对象本身可变。)
全局对象的属性
全局对象是 最顶层的对象。
- 浏览器里面,顶层对象是
window
,但 Node 和 Web Worker 没有window
。 - 浏览器和 Web Worker 里面,
self
也指向顶层对象,但是Node没有self
。 - Node 里面,顶层对象是
global
,但其他环境都不支持。
ES5之中,全局对象的属性与全局变量是等价的,
ES6之中,var
命令和function
命令声明的全局变量,依旧是全局对象的属性;
另一方面规定,let
命令、const
命令、class
命令声明的全局变量,不属于全局对象的属性。