ES6专题-var、let、const

65 阅读1分钟

var 和 let、const

一、重复声明

var可以重复声明,let、const 不可以

var a = 1;
var a = 2;

let、const区别(是否可以重复赋值)

let a = 1;  a = 2;
const b = 1;  b = 2; 报错 

二、变量提升

var可以变量提升: 将声明变量提到最前面.但是没有赋值。 let、const则报错

console.log(a);
var a = 1;
console.log(a);

三、作用域

var 不支持封闭作用域,会声明到全局作用域上 1.函数作用域 2.全局作用域

第二对括号代表立刻执行前面的匿名函数,括号内的值会作为实参传递给匿名函数

 (function(type){
   console.log(type); //结果:1
 })(1);

let支持块级作用域声明的变量只会声明在当前作用域

3.1、 var会先执行外面script再执行宏任务setTimeout

let{}配合可以产生一个作用域

for (let i = 0; i < 3; i++) {
  setTimeout(function () {
    console.log(i);
  }, 1000);
}
console.log(i);
// var 3 3 3
// let 1 2 3

3.2、要想里面的宏任务跟着循环一起执行,也可以在里面加匿名函数(或者如上换let),后面的括号会立即执行前面的函数

for(var i = 0; i<3;i++){
  (function (i) {
    setTimeout(function () {
      console.log(i);
    }, 1000);
  })(i);
}

3.3.域解释问题 变量提升 用let解决这个问题

暂存死区

如果作用域内 有这样一个变量 那么这个作用域内就会绑定这个变量,不会继续向上查找了

let b = 1;
{
  console.log(b); //报错
  let b = 2;
}