Fork me on GitHub

ES6篇

ES6

let 和 var 的主要区别 ?

  1. let 声明的变量只在当前作用域内有效
  2. let声明的变量不能被重复声明
  3. 不存在变量提升
  4. ES6之前的作用域:全局作用域、函数作用域、eval作用域、ES6块级作用域
ES6块级作用域是什么?

包裹在花括号中的区域{…….},

如下:

1
2
3
4
5
if(){} 
switch(){}
for(){}
try() catch(err){}
{...}
let块级作用域范围
1
2
3
4
5
6
{
var a = 1;
let b = 2;
}
console.log(a); // 返回1
console.log(b); // 报错 b is not defined
1
2
3
4
5
6
7
8
9
{
let a = 1;
{
// 内部能访问外部的变量,因为a变量作用域,包括了 b作用域
console.log(a);
let b = 2; // 当前变量,只能在当前作用域内访问
}
console.log(b);
}
let 只作用在当前块级作用域
1
2
3
4
for (let i = 0; i < 3; i++) {
console.log(i) // 0 1 2
}
console.log(i) // 报错
1
2
3
4
5
let i;
for(i = 0; i < 3 ; i++){
console.log(i); // 0 1 2
}
console.log(i); // 3
使用let 或者 const 聲明的变量,不能再被重新声明
1
2
3
4
let dad = '宝宝';
console.log(dad); // Identifier 'dad' has already been declared
let dad ;
console.log(dad);
1
2
3
4
const  dad = '宝宝';
console.log(dad); // Identifier 'dad' has already been declared
const dad = '我才是宝宝';
console.log(dad);
暂存死区

出现相同作用域时,都是独立的,无法通过作用域链向上取值,也无法向下取值

1
2
3
4
5
6
let obj  = '猴子';
{
console.log(obj); // Cannot access 'obj' before initialization
let mok = '我还行!我没输';
}
console.log(mok);