我们都知道,其实在ES6之前,js只有全局作用域和函数作用域,并不存在块级作用域。
不存在块级作用域,就会导致变量提升的问题。
变量提升往往会导致出现一些出乎意料的结果,所以ES6中新增了“块级作用域”来避免这个问题的出现。
块级作用域表示的是定义的变量可执行上下文环境只能在一个代码块中,一个代码块由一个大括号括住的代码构成,超出这个大括号范围将无法访问内部的变量。
ES6 新增的let和const关键字就是为块级作用域服务的,来看个例子吧:
{ let a = 1; console.log(a); // 1 } console.log(a); // ReferenceError: a is not defined
一旦我们用let关键字定义一个变量a后,我们能在代码块中输出变量a的值,但是若在代码块外访问变量a就会抛出a未定义的异常。