Appearance
es6 创建变量的方式
- var function
- let const
- import class
let 不存在变量提升
javascript
console.log(a); // =>Uncaught ReferenceError: a is not defined
let a = 12;
console.log(window.a); // =>undefined
console.log(a); // =>12
1
2
3
4
2
3
4
不允许重复定义
javascript
let a = 12;
console.log(a);
let a = 13; // => Uncaught SyntaxError: Identifier 'a' has already been declared
console.log(a);
1
2
3
4
2
3
4
不存在变量提升
javascript
b = 12;
console.log(b); // =>12
a = 12; // =>Uncaught ReferenceError: a is not defined
console.log(a);
let a = 13;
console.log(a);
1
2
3
4
5
6
2
3
4
5
6
javascript
let a = 10,
b = 10;
let fn = function () {
console.log(a, b); //=>Uncaught ReferenceError: a is not defined
let a = (b = 20);
/*
* let a=20;
* b=20; //=>把全局中的 b=20
*/
console.log(a, b);
};
fn();
console.log(a, b);
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
暂时性死区
私有作用域
javascript
var a = 12;
if (true) {
console.log(a); //=> Uncaught ReferenceError: a is not defined
let a = 13; //=> 基于LET创建变量,会把大部分{}当做一个私有的块级作用域(类似于函数的私有作用域),在这里也是重新检测语法规范,看一下是否是基于新语法创建的变量,如果是按照新语法规范来解析
}
1
2
3
4
5
2
3
4
5
全局作用域
javascript
console.log(a); // => Uncaught ReferenceError: a is not defined
console.log(typeof a); // =>"undefined" 在原有浏览器渲染机制下,基于typeof等逻辑运算符检测一个未被声明过的变量,不会报错,返回UNDEFINED
let a; //如果当前变量是基于 ES6 语法处理,在没有声明这个变量的时候,使用 TYPEOF 检测会直接报错,不会是 UNDEFINED,解决了原有的 JS 的死区
1
2
3
4
2
3
4