Error:let definitions are not supported by current javascript version
-
在webstrom內(nèi),寫簡單的js文件,想用let定義變量,但是出現(xiàn)了這個問題,按字面理解,es版本對不上。
2017-10-03 23-58-54屏幕截圖.png?
-
打開 file-> settings -> languages & frameworks -> javascripts 如下:
?
2017-10-04 00-03-59屏幕截圖.png?
將javascript language version 修改為ECMAScript6,然后點擊apply即可,此時會發(fā)現(xiàn)錯誤消失了。
關(guān)于let關(guān)鍵字
- 暑期寫了2個月的angular2,最近重新學js,在看ES6的特性,發(fā)現(xiàn)ES6出了let關(guān)鍵字,也就是說es6之后,js也能定義塊級作用域的變量了。(在es6之前,定義變量用var,變量在函數(shù)作用域內(nèi)生效,但是沒有塊級作用域,var所定義的變量還是會出現(xiàn)混淆的情況)。感覺要養(yǎng)成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定義的變量在函數(shù)作用域內(nèi)生效,而let定義的變量在指定的塊(block)內(nèi)生效。因此可以看出,多用let可以避免很多es6之前的所謂找不到出錯的變量在哪個位置的bug。
續(xù)更(2017/10/04)
- 昨天晚上寫完這篇文章,稍微搜索了下下面的問題,結(jié)果找到的資料有點少,于是上某乎問了下這個問題:
- es6出了let關(guān)鍵字,是否意味著以后寫js定義變量多用let,這樣就避免那些定位不到的bug?
早上醒來得到了幾個評論,大概做下總結(jié):
- 這個問題其實只說對了一半。
- let關(guān)鍵字其實是為javascript增加了塊級作用域,本質(zhì)上還是個變量,依舊能賦值改變,只要能賦值改變,改變了值就容易引入bug。
- es6為這個問題引入了const關(guān)鍵字。
關(guān)于const關(guān)鍵字
-
const聲明的變量不得改變值,這意味著,const一旦聲明變量,就必須立即初始化,不能留到以后賦值。const聲明一個只讀的常量。一旦聲明,常量的值就不能改變。而const與let一樣,都只是在塊級作用域內(nèi)有效。 - 綜上所述:能用const就不用let,如果需要一個變化的值,可以直接再定義一個const常量,這樣能從本質(zhì)上避免很多關(guān)于變量定位的坑。當然,如果用let定義能讓你節(jié)省下很多時間,可以考慮用let。
- 參考資料:阮一峰-ECMAScript 6 入門

