ES6:变量let和const

本博客根据阮一峰老师的《ES6标准入门》来写。

ES5变量声明的缺点:
1.可以重新声明

 var a = 2;
 var a = 5;
 console.log(a);

2.无法限制修改
3.没有块级作用域

  {
    var a = 12;
  }
 console.log(a); //12

1.let命令

01.let用来声明变量用法类似var,只在let命令所在的代码块有效.
eg1: 示例1:

 {
        var a = 2;
        let b = 5;
    }
    console.log(a);   //2
    console.log(b);   //error

2.不存在变量提升.

   eg:{
            console.log(a);   // undefined
            var a = 2;

            console.log(b);   //referenceError
            let b = 3;
    }
    注意:let 声明的变量一定要在声明之后使用,否则报错 (TDZ

3.暂时性死区(TDZ)
ES6明确规定,如果区块存在let命令和const命令,那么这个区块对这些命令声明的变量,从一开始就形成了封闭作用域,凡在声明之前使用这些变量,就会报错。
eg:

{
        //存在let,TDZ开始
        temp = 2;  //Cannot access 'temp' before initialization
        console.log(temp); //referenceError
        let temp;  //TDZ结束
        temp = 3;
        console.log(temp);   //3

    }
   注意:只要存在let,和const,这个代码块就会有TDZ,直到看到let或者const声明并且赋值变量。

4.不允许重复声明
eg:

  {
            var a = 2;
            let a = 5;    //referenceError
        }

5.块级作用域
ES5只有全局作用域和函数作用域,没有块级作用域。
eg1:

    var a = [];
    for(var i = 0 ; i < 10; i ++){
        a[i] = function(){
            console.log(i)
        }
    }
    a[1]();   //10

/*
因为变量i是var命令声明的,在全局范围内有效,所以全局智邮一个变量i,每一次循环,变量i的值都会发生变化,而循环内被赋值给数组a的函数内部的console.log(i),里面的i指向的是全局的i,也就是说数组a里面的成员都是指向一个i,导致运行时输出的时最后一轮的i的值,也就是10
*/

es6:
eg:

   var a = [];
    for(let i = 0 ; i < 10; i ++){
        a[i] = function(){
            console.log(i)
        }
    }
    a[1]();   //1

 块级作用域的补充,我们就没有必要去使用立即执行函数了。

2.const命令

1.const声明一个只读的常量,一旦声明,常量的值就不能改变。

   {
        const a = 3;
        console.log(a)  //3

        a = 4;  //referenceError
    }
2.const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。
  {
        const a;
        a = 2;   //referenceError
    }
    
3.const的作用域与let命令相同,旨在块级作用域内有效
   {
        const a = 2;
        console.log(a); //2   
    }   
    console.log(a); //2   
4.const声明的常量,也与let一样不可重复声明。
   {
        const a = 2;
        var a = 3;    //referenceError
    }
5.本质
    对于const而言,保证的是变量指向的那个内存地址保存的数据不能改动。
    对于常量而言,值就保存在那个内存地址,因此等于常量。但对于复合类型数据,const只能摆正指针指向的地址是固定的,但是数据就不一定了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值