let和const命令
let和const声明的变量只在代码块内有效
1
2
3
4
5
6
7
|
{
let a = 10;
var b = 1;
}
a // ReferenceError: a is not defined.
b // 1
|
不存在变量提升
变量一定要在声明后使用,否则报错
1
2
3
4
5
6
|
var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError
let tmp;
}
|
不允许重复声明
1
2
3
4
5
|
// 报错
function () {
let a = 10;
var a = 1;
}
|
块级作用域
1
2
3
4
5
6
7
8
9
10
11
12
|
function f() { console.log('I am outside!'); }
(function () {
if(false) {
// 重复声明一次函数f
function f() { console.log('I am inside!'); }
}
f();
}());
//I am inside! ES5 函数提升
//I am outside! ES6 块级作用域
|
const命令
- 声明一个只读的常量,一旦声明,常量的值就不能改变
- 一旦声明变量,就必须立即初始化,不能留到以后赋值
##let命令、const命令、class命令声明的全局变量,不属于全局对象的属性
1
2
3
4
5
6
7
|
var a = 1;
// 如果在Node的REPL环境,可以写成global.a
// 或者采用通用方法,写成this.a
window.a // 1
let b = 1;
window.b // undefined
|