美文网首页
被遗漏的const、let要点

被遗漏的const、let要点

作者: 芒果加奶 | 来源:发表于2018-04-26 19:56 被阅读0次

    2.1 let 命令

    2.1.1 基本用法

    let 块级作用域

    for (let i = 0; i < 3; i++) {
      let i = "abc";
      console.log(i);
    }
    // 打印三次abc,说明for循环变量是父作用域,循环体是单独作用域
    

    2.1.2 不存在变量提升

    先定义变量后使用

    2.1.3 暂时性死区(划重点)

    只要块级作用域中存在let命令,所声明的变量就绑定(binding)在区域中,不能受到外部影响

    var temp = 123;
    if (true) {
      temp = 122; //temp not defined
      let temp;
    }
    
    var x = x;
    let y = y; //y未定义
    

    2.1.4不允许重复声明

    let 不允许在相同作用域重复生命同一个变量

    2.2 块级作用域与函数声明

    块级作用域允许声明函数的规则只能在大括号中成立

    "use strict";
    if (true) {
      function f() {}
    }
    
    if (true) 
      function f() {} //报错
    

    2.2 const 命令

    2.3.1 基本用法

    const 声明一个只读的常量,一旦声明,常量值不能改变(!!!真的不能改变么,答案在本质上

    const PI = 3.14
    console.log(PI)
    
    PI = 3 //TypeError: Assignment to constant variable.
    

    一样是块级作用域,存在暂时性死区,不能重复声明。

    2.3.2本质(划重点)

    const 实际上保证是不是变量值不得变动而是变量指向的地址不得变动。
    对于基本数据类型,值保存在变量指向的内存地址中,因此等同于常量。但是对于引用性数据(以对象和数组为主),变量保存内存地址保存的只是指针,const只能保证指针是固定的,对于指针指向的数据不能保证。

    "use strict";
    const obj = {};
    obj.value = 123;
    console.log(obj.value); //123
    foo = {}; //将foo指向另一个对象,正常模式下不报错,在严格模式下报错
    

    文章为阮大大《ES6标准入门》整理而来

    相关文章

      网友评论

          本文标题:被遗漏的const、let要点

          本文链接:https://www.haomeiwen.com/subject/cfgmlftx.html