ES6新增了块级作用域,总结一句话大致就是:大括号{}包起来的代码块基本山都可以当做块级作用域。
常见的有
直接使用{}包起来:
{
var a = 4
}
函数体大括号,if-else大括号,for循环大括号,switch大括号,try-catch大括号等。需要注意的是,for循环,每一次循环时的{}都是一个独立的块级作用域。
for(let i=0; a < 5; i++){ let j = i}
上面代码循环了五次,实际上有五个独立的j。
日常开发中,我们就可以利用这个特性,来创建块级作用域了。
使用let或const声明的变量只在当前块级作用域生效,出了这个代码块,就无法访问。
{ let a = 5 }console.log(a)
// Uncaught ReferenceError: a is not defined
日常开发中,块级作用域中使用的变量,尽量使用let或者const声明。
需要注意的问题:
let和const变量一定要先声明,再使用,避免出错。不要试图利用变量提升的特性。
const声明变量时,一定要初始化,否则会报错。let建议也在声明时初始化。
const声明的变量一旦初始化,以后就不可以在进行赋值操作,但可以对其引用的对象进行更改。
const noChangeMe;
//Uncaught SyntaxError: Missing initializer in
const declarationconst noChangeMe = [1,2,4]noChangeMe = [2, 3]
//Uncaught TypeError: Assignment to constant variablen
oChangeMe[100] = 100
// everything is OK
let和const声明的变量不能再重复声明。虽然var可以无限次重复声明,但是并不适用于这两个新的声明方式。
let a = 1
let a = 2
// Identifier 'a' has already been declared
不要用window.xxx去调用let与const声明的变量 ES6规定,let、const、class声明的全局变量,不属于顶层对象的属性。