美文网首页
深入理解ES6:1.块级作用域绑定

深入理解ES6:1.块级作用域绑定

作者: 独木舟的木 | 来源:发表于2019-10-10 15:09 被阅读0次

    Tags:letconst

    块级声明:声明在指定块的作用域之外无法访问的变量。

    块级作用域存在于:

    • 函数内部;
    • 块中(字符{}之间的区域)。

    let 声明

    1. 块级声明:用 let 声明的变量可以把该变量的作用域限制在当前代码块中。
    2. 没有变量提升机制let 声明不会被提升(Hoisting)。
    3. 禁止重声明:同一个作用域中不能用 let 重复定义已经存在的标识符。

    const 声明

    1. 使用 const 声明的是常量,其值一旦被设定后不可更改。因此,每个通过 const 声明的常量必须进行初始化
    2. const 声明不会被提升。
    3. 同一个作用域中不能用 const 重复定义已经存在的标识符。
    4. const 声明不允许修改绑定,但允许修改绑定的值。也就是说,不可以为 const 定义的常量再赋值,但是如果 const 声明的常量是对象,可以修改该对象的属性值。

    循环

    for-infor-of 循环中,letconst 都会每次迭代时创建新绑定,从而使循环体内创建的函数可以访问到相应迭代的值。

    ⚠️ 在 for 循环中使用 const 声明变量可能会引发错误,除非后续循环中不会修改该变量的值。

    全局作用域绑定

    如果在全局作用域中使用 letconst,会在全局作用域下创建一个新的绑定,但该绑定不会添加为全局对象的属性。换句话说,用 letconst 不能覆盖全局变量,而只能遮蔽它。

    // 在浏览器中
    let RegExp = "Hello!";
    console.log(RegExp); // "Hello!" ,<-- 创建了一个全局变量
    console.log(window.RegExp === RegExp); // false <-- 但这个全局变量并不是全局对象 window 的属性
    
    const ncz = "Hi";
    console.log(ncz); // "Hi"
    console.log("ncz" in window); // false
    

    块级绑定的最佳实践

    默认使用 const,只有确实需要改变变量的值时使用 let

    相关文章

      网友评论

          本文标题:深入理解ES6:1.块级作用域绑定

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