ES6理解
ES6规定了变量的问题,主要体现在变量或者函数的作用域问题上。
1.ES6取消了顶级变量,所以let , const , class声明的全局变量不存在顶级对象的属性,即
var a = 1;
// 如果在Node的REPL环境,可以写成global.a
// 或者采用通用方法,写成this.a
window.a // 1
let b = 1;
window.b // undefined
2.块级作用域使得 { }中的变量或者对象不可以被外界所使用的,会报错,同时不存在变量提升,所以在未进行定义的情况下,不可以使用该变量,这就是所谓的暂时性死区
2.1. 为什么要是用块级作用域
在很多语言中,例如:C等都存在块级作用域,而 ES6 之前是没有的,
//C语言
#include <stdio.h>
void main()
{
int i=2;
i--;
if(i)
{
int j=3;
}
printf("%d/n",j); //use an undefined variable:j
}
//javascript语言
functin test(){
for(var i=0;i<3;i++){
}
alert(i);
}
test();//3
i是for循环中定义的变量,在一次次循环结束后,i为3,并且一直存在于程序内存中,造成内存泄露
块级作用域可以防止变量污染,并且防止上面造成的内存泄露
3.let定义的变量不可以在同一作用域下重复定义即:
(function () {
let a = 0;
let a = 4;
alert(a);
})()
//Identifier 'a' has already been declared
const定义的变量后必须进行初始化设置,即进行赋值
const s;
s=3
//Missing initializer in const declaration
4.ES6 的块级作用域允许声明函数的规则,只在使用大括号的情况下成立,如果没有使用大括
号,就会报错。