es6新特性--let,const關鍵字

weixin_33749242發表於2017-10-04

Error:let definitions are not supported by current javascript version

  • 在webstrom內,寫簡單的js檔案,想用let定義變數,但是出現了這個問題,按字面理解,es版本對不上。

    7166236-5fcd95422bbeed4b.png
    2017-10-03 23-58-54螢幕截圖.png

  • 開啟 file-> settings -> languages & frameworks -> javascripts 如下:

    7166236-dfd4a28508ea3012.png
    2017-10-04 00-03-59螢幕截圖.png

  • 將javascript language version 修改為ECMAScript6,然後點選apply即可,此時會發現錯誤消失了。

關於let關鍵字

  • 暑期寫了2個月的angular2,最近重新學js,在看ES6的特性,發現ES6出了let關鍵字,也就是說es6之後,js也能定義塊級作用域的變數了。(在es6之前,定義變數用var,變數在函式作用域內生效,但是沒有塊級作用域,var所定義的變數還是會出現混淆的情況)。感覺要養成let定義變數的習慣。在下面舉一個簡單的例子:
function test(){
    for(var i = 0 ; i <5 ; i ++){}
    console.log(i);              //i = 5
    for(let j = 0 ; j < 5 ; j ++){}
    console.log(j);              //RefreenceError , j is not defined
}
test();
  • 由上面的簡單例子可知,var定義的變數在函式作用域內生效,而let定義的變數在指定的塊(block)內生效。因此可以看出,多用let可以避免很多es6之前的所謂找不到出錯的變數在哪個位置的bug。

續更(2017/10/04)

早上醒來得到了幾個評論,大概做下總結:

  • 這個問題其實只說對了一半。
  • let關鍵字其實是為javascript增加了塊級作用域,本質上還是個變數,依舊能賦值改變,只要能賦值改變,改變了值就容易引入bug。
  • es6為這個問題引入了const關鍵字

關於const關鍵字

  • const宣告的變數不得改變值,這意味著,const一旦宣告變數,就必須立即初始化,不能留到以後賦值。const宣告一個只讀的常量。一旦宣告,常量的值就不能改變。而const與let一樣,都只是在塊級作用域內有效。
  • 綜上所述:能用const就不用let,如果需要一個變化的值,可以直接再定義一個const常量,這樣能從本質上避免很多關於變數定位的坑。當然,如果用let定義能讓你節省下很多時間,可以考慮用let。
  • 參考資料:阮一峰-ECMAScript 6 入門

相關文章