Skip to content
On this page

es6 创建变量的方式

  1. var function
  2. let const
  3. 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

不允许重复定义

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

不存在变量提升

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
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

暂时性死区

私有作用域

javascript
var a = 12;
if (true) {
  console.log(a); //=> Uncaught ReferenceError: a is not defined
  let a = 13; //=> 基于LET创建变量,会把大部分{}当做一个私有的块级作用域(类似于函数的私有作用域),在这里也是重新检测语法规范,看一下是否是基于新语法创建的变量,如果是按照新语法规范来解析
}
1
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
沪ICP备20006251号-1