ES6学习笔记

154 阅读2分钟

前言,趁着休假,准备把阮老师的ES6入门再看一遍,梳理下知识点,加强理解。

let和const

  • let与var,都是声明变量的,但是let声明的变量只在对应的代码块内有效
  • for循环中的计数很适合用let
  • for循环还有一个特殊之处,就是循环变量部分是个父级作用域,循环体内是个单独的作用域
    for (let i=0;i<2;i++) {
        let i= "abc";
        console.log(i)
    }
    // "abc"
    // "abc"
  • let声明的变量不存在变量提升,即在未声明之前不可使用
  • 暂时性死区TDZ,在块级作用域内,只要使用了let const声明变量,那么在声明语句之前使用这些变量都会报错
  • 暂时性死区说明typeof将不是一个百分之百安全的操作
  • 不允许在相同的作用域内,重复声明同一个变量,因此,也不能在函数内部重新声明参数
    function func(arg){
        let arg;
    }
    func()  //报错
    function func(arg){
        {
        let arg;  
        }
    }
    func()  //不报错
  • 块级作用域,ES5只有全局作用域和函数作用域,块级作用域的出现解决两个问题:

    内部变量覆盖外部变量

    var tmp = "hello"
    function func(){
       console.log(tmp);
       if(false){
           var tmp = "world";
       }
    }
    func()  //undefined  由于变量提升,内部变量覆盖了外部变量

解决循环计数变量泄露为全局变量

  • 块级作用域的出现,使得立即执行匿名函数不再必要了
  • ES5规定只能在顶层作用域以及函数作用域内部声明函数,ES6打破了这一约束,但是在块级作用域内部声明函数,请采用函数表达式,尽量不要在块级作用域内部声明函数
  • const声明的是只读常量,一旦声明,常量的值不能改变,不存在变量提升,但是存在暂时性死区
  • const声明一个引用类型的值,其实是保证了指向数据的指针地址不改变,但是数据就没法保证了
  • ES6一共有6种声明变量的方法,另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。也就是说,从ES6开始,全局变量将逐步与顶层对象的属性脱钩。

----未完待续