ES6基础(1)-let

【直接使用全局变量,会对全局变量造成污染】

1、let和var的区别

  • let声明的变量只在当前(块级)作用域内有效;
  • let声明的变量不能被重复声明;
  • 不存在变量提升;

2、作用域:

全局作用域:windows作用域

函数作用域:函数内的作用域,函数外部不能引用函数内部的变量

eval作用域:~~~

块级作用域:一堆花括号中的区域{...},对象上的{...}不是块级作用域

3、let只作用在当前块级作用域中:1的作用域包含2,2的作用域不包含1,因此a可以打印出来,b打印不出来

1 {//1作用域
2    let a=1
3     {//2作用域
4     console.log(a);
5     let b=2;
6     } 
7   console.log(b);  
8 }
for(let i = 0;i <3;i ++){
}
console.log(i);
#for循环中()内的作用域相当于1的作用域,{}内的作用域相当于2的作用域)

 4、使用let或者const声明的变量,不能重新声明,否则会报错

let son = "1"
let son = "2"
#报错,不能重复声明 

5、let声明的变量不存在“变量提升”(变量的声明提升到前面)

变量提升:
console.log(dad)
var dad="我是爸爸“
=>提升后
var dad;
console.log(dad)
dad="我是爸爸“
变量提升:
console.log(dad)
let dad="我是爸爸“
 运行:
报错:dad is not defined;

6、暂存死区:

有let在的作用域会形成一个封闭的作用域,无法再向上查找;

若作用域里面的是var,作用域的”{}“对var无效果;

let和var对比效果:
{
  var monkey ='我是美猴王‘
  {

    console.log(monkey);            #有没有{}都一样

    var monkey = '我觉得我还可以再抢救一下‘

  }

  console.log(monkey);

}

--------------------------------------------------------------
{
  let monkey ='我是美猴王‘
  {

    console.log(monkey);              #无法向上查找

    let monkey = '我觉得我还可以再抢救一下‘       #let在的作用域被封闭了

  }

  console.log(monkey);

}

 7、前端面试题:var和const的区别(为什么这么实现)

  

原文地址:https://www.cnblogs.com/shary-blue/p/13991662.html