美文网首页程序员
来聊聊ES6中的Let和Const

来聊聊ES6中的Let和Const

作者: 长梦未央 | 来源:发表于2017-11-01 21:00 被阅读0次

    现在可以在 JavaScript 中使用两种新的方式来声明变量:let 和 const。

    到目前为止,在 JavaScript 中声明变量的唯一方式是使用关键字 var。为了理解为何添加了 let 和 const,我们先看一个示例,了解使用 var 会带来怎样的麻烦。

    请看看下面的代码。

    你认为运行 getClothing(false) 后的输出是什么?

    function getClothing(isCold) {
      if (isCold) {
        var freezing = 'Grab a jacket!';
      } else {
        var hot = 'It's a shorts kind of day.';
        console.log(freezing);
      }
    }
    

    结果时undefined,为什么呢?那是因为。。。

    提升

    提升是浏览器解析 JavaScript 的结果。本质上,在执行任何 JavaScript 代码之前,所有变量都会被“提升”,也就是提升到函数作用域的顶部。因此在运行时,getClothing() 函数实际上看起来如下所示…

    function getClothing(isCold) {
    var =freezing,hot;
      if (isCold) {
         freezing = 'Grab a jacket!';
      } else {
         hot = 'It's a shorts kind of day.';
        console.log(freezing);
      }
    }
    

    在执行该函数之前,所有变量都会被提升到该函数作用域的顶部。我们该怎么办?

    let 和 const

    使用 let 和 const 声明的变量解决了这种提升问题,因为它们的作用域是到块,而不是函数。之前,当你使用 var 时,变量要么为全局作用域,要么为本地作用域,也就是整个函数作用域。

    如果在代码块(用花括号 { } 表示)中使用 let 或 const 声明变量,那么该变量会陷入暂时性死区,直到该变量的声明被处理。这种行为会阻止变量被访问,除非它们被声明了。

    function getClothing(isCold) {
      if (isCold) {
       let  freezing = 'Grab a jacket!';
      } else {
      let  hot = 'It's a shorts kind of day.';
        console.log(freezing);
      }
    }
    //使用 let 和 const 声明的变量仅在它们所声明的块中可用。
    

    你认为运行 getClothing(false) 后的输出是什么?

    function getClothing(isCold) {
      if (isCold) {
        const freezing = 'Grab a jacket!';
      } else {
        const hot = 'It's a shorts kind of day.';
        console.log(freezing);
      }
    }
    

    答案是freezing is not defined

    关于使用 let 和 const 的规则

    let 和 const 还有一些其他有趣特性。

    使用 let 声明的变量可以重新赋值,但是不能在同一作用域内重新声明。
    使用 const 声明的变量必须赋初始值,但是不能在同一作用域内重新声明,也无法重新赋值。

    你认为运行以下代码后的输出是什么?

    let instructor = 'James';
    instructor = 'Richard';
    console.log(instructor);
    //Richard
    

    使用案例

    最大的问题是何时应该使用 let 和 const?一般法则如下:

    • 当你打算为变量重新赋值时,使用 let,以及
    • 当你不打算为变量重新赋值时,使用 const。

    因为 const 是声明变量最严格的方式,我们建议始终使用 const 声明变量,因为这样代码更容易读懂,你知道标识符在程序的整个生命周期内都不会改变。如果你发现你需要更新变量或更改变量,则回去将其从 const 切换成 let。

    很简单吧?但是 var 呢?

    var 该怎么办?
    还有必要使用 var 吗?没有了。

    在某些情况下有必要使用 var,例如如果你想全局定义变量,但是这种做法通常都不合理,应该避免。从现在开始,建议放弃使用 var,改为使用 let 和 const。

    相关文章

      网友评论

        本文标题:来聊聊ES6中的Let和Const

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