ES6的学习笔记(一)(let、const、var)

170 阅读1分钟

语法

let

  • es6中新增的用于声明变量的关键字。
  • let声明的变量只在所处的块级有效。
if(true){
    let a=10;
    console.log(a); //10
}
console.log(a); //a is not defined 如果是var 则输出10

if(true){
    let a=10;
    console.log(a); //10
    if(true){
        let c=20;
    }
    console.log(c); //c is not defined
}
console.log(a); //a is not defined
for(var i=0;i<3;i++){
    console.log(i);// 1 2 3
}
console.log(i);// 3 改为let则 输出:i is not defined
  • 不存在变量提升
console.log(a);// a is not defined
let a=10; //var 则输出:undefined
  • 暂时性死区
var num=0;
if(true){
    console.log(num);// not defined
    let num; //使用了let,因此不会向上级作用域寻找num
}
  • 经典问题
let arr=[]; //注意和var的区别
for(let i=0;i<2;i++){
    arr[i]=function(){
        console.log(i);
    }
}
arr[0]();
arr[1]();

const

  • 作用:声明常量,常量就是值不能变化的量。
  • 具有块级作用域。
if(true){
    const a=10;
    console.log(a);// 10
}
console.log(a); // a is not defined

var num=10;
if(true){
    var num=20;
    console.log(num);//20
}
console.log(num);//20

const num=10;//or let
if(true){
    const num=20; // or let
    console.log(num); //20
}
console.log(num);//10
  • 声明常量时,必须赋值
const PI; //报错Missing initializer in const declaration
  • 常量赋值后,值不能修改(引用类型的内部值是可以修改的)

let、const、var的区别

varletconst
函数级作用域块级作用域块级作用域
变量提升不存在变量提升不存在变量提升
值可更改值可更改值不可更改