让前端飞Web前端之路前端Vue专辑

一: 块级绑定 let和const

2019-12-20  本文已影响0人  岁月静好_不负此生

前言

该部分为书籍 深入理解ES6 第一章(块级绑定)笔记

var 声明 与变量提升

块级声明

let声明 和 const声明

特性:

  1. 变量不会被提升到当前代码块的顶部

    function getValue(condition) {
      if (condition) {
        let value = "blue";
        // 其他代码
        return value;
       } else {
        // value 在此处不可用
        return null;
       }
       // value 在此处不可用
    }
    
  2. 禁止重复声明

    如果一个标识符已经在 代码块内部被定义, **不管这个标识符被定义的方式(使用var, const, let) **, 使用同一个标识符进行 let 声明就会导致抛出错误

    var count = 30;
    // 语法错误
    let count = 40;
    
  3. 会将变量的作用域限制在当前代码块中

    {
        let value = 'blue';
        console.log(value);// blue
    }
    console.log(value);// 抛出错误
    
  4. 全局作用域上定义的也不会添加到全局对象中

    使用 var 在全局作用域中定义的变量, 会成为全局对象(在浏览器中是window)的一个属性.

    var ncz = "Hi!";
    console.log(window.ncz); // "Hi!"
    
    const ncz = "Hi!";
    console.log(ncz); // "Hi!"
    console.log("ncz" in window); // false
    

const声明其他特性

特性:

  1. 需要在声明时进行初始化

    // 有效的常量
    const maxItems = 30;
    // 语法错误:未进行初始化
    const name;
    
  2. const 变量不能被再次赋值

    • 会阻止对于变量绑定与变量自身值的修改, 这也意味着 const 声明并不会阻止对变量成员的修改
    • const 阻止的是对于变量绑定的修改, 而不阻止对成员值的修改.
    const maxItems = 5;
    maxItems = 6; // 抛出错误
    
    const person = {
     name: "Nicholas"
    };
    // 工作正常
    person.name = "Greg";
    // 抛出错误
    person = {
     name: "Greg"
    };
    

暂时性死区(TDZ)

循环中的常量声明

最佳实践

上一篇 下一篇

猜你喜欢

热点阅读