ES6与ES5有所不同,对变量的作用域进行了详细的划分,并且有了严格的使用范围;
与ES5的不同:
(1)作用范围发生变化
(2)无变量提升
作用范围
在ES6中变量的作用域分为:全局作用域,局部作用域,块级作用域
全局作用域:定义在函数体和{ }外,在全局范围内生效
局部作用域:定义在函数体内部,包括函数的参数,仅在函数体内部有效
块级作用域:定义在{ }内部,仅在{ }中生效
无变量提升
在ES6中变量必须先定义在使用
必须先定义在使用
a=10;
let a;
console.log(a) // Uncaught ReferenceError: a is not defined
全局变量
let a=20;
function demo1() { //全局变量
console.log(a) // 20
}
console.log(a) // 20
demo1();
局部变量
function demo() { // 局部变量
let a=10;
console.log(a); // 10
}
demo();
function demo1(){
a = 1;
let a;
console.log(a) // Uncaught ReferenceError: a is not defined
}
demo1();
在函数demo中能够正常的调用,但是在demo1在调用的过程中会报错,因为在给a赋值之后,在去声明的变量。注意:若未声明则默认为ES5中的语法,会在全局 var a;
块级作用域
let a=9;
if(a>4) {
let b=10;
console.log(b); // 10
}
console.log(b); // Uncaught ReferenceError: b is not defined
注意:
在ES6中,语法更加的严格,必须先定义在使用。还需注意变量的作用域(尤其的新增的块级作用域)