首页 > 其他 > 详细

let和const

时间:2021-08-19 08:45:16      阅读:25      评论:0      收藏:0      [点我收藏+]

let和const

为什么要新增let

因为var不好用 缺陷如下: 1. var可以重复声明 2. var没有块级作用域 举个例子
 
  var name = ‘yinxu‘
                    if(true){
                        var name = ‘work‘
                        console.log(name); //work
                    }
                    console.log(name); //work


                    let a = [];
                    //这是一个父作用域
                    for (let i = 0; i < 10; i++) { //这是一个子作用域一共产生10次
                        a[i] = function () { //当前的i只在本轮循环有用
                            console.log(i);
                        };
                    }
                    a[6](); // 6

 

let的特点

  • let不存在变量提升

    var命令会存在变量提升的现象,即变量可以在声明之前使用,为了纠正这种现象let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则回报错 例如
  • console.log(faa); //undefined
                                    var faa = 10
    
                                    console.log(foo) //Uncaught ReferenceError: foo is not defined
                                    let foo = 1

     

  • 暂时性死区

    只要块级作用域内存在let命令,它所声明的变量就‘绑定’这个区域,不再受外部的影响
    var tmp = 123
                                    if(true){
                                        tmp = ‘abc‘ //VM159:3 Uncaught ReferenceError: Cannot access ‘tmp‘ before initialization
                                        let tmp;
                                    }

     

    es6明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量从一开始就形成了 封闭作用域。凡是在声明之前就使用这些变量,对tmp会报错。 总之,在代码块内使用let命令声明变量之前,该变量都是不可用的,这在语法上称为暂时性死区
  •  if(true){
           tmp = ‘aaa‘;
           console.log(tmp); //报错
    
            let tmp;
            console.log(tmp); //undefined
    
                        tmp = 123;
                        console.log(tmp); //123
              }
    一些死区比较隐蔽,不太容易发现
  • function bar (x=y,y=2){
            return [x,y]
        }
         bar() //VM164:1 Uncaught ReferenceError: Cannot access ‘y‘ before initialization
                               
    上述代码中之所以会报错就是因为x默认等于y,而此时y还没有声明,属于死区。
    但是如果这么写就不会报错
  • function bar(x=2,y=x) {
           return[x,y]
    }
           bar() //[2,2]

    总之,暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。

  • 不允许重复声明

    let不允许在相同作用域内重复声明同一个变量 
    • function func() {
               let a = 10
                var a = 1
        }

       

let和const

原文:https://www.cnblogs.com/code-klaus/p/15158380.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!