Error:let definitions are not supported by current javascript version
-
在webstrom內(nèi)襟己,寫簡單的js文件池摧,想用let定義變量,但是出現(xiàn)了這個(gè)問題,按字面理解繁涂,es版本對(duì)不上。
?
-
打開 file-> settings -> languages & frameworks -> javascripts 如下:
?
?
將javascript language version 修改為ECMAScript6二驰,然后點(diǎn)擊apply即可扔罪,此時(shí)會(huì)發(fā)現(xiàn)錯(cuò)誤消失了。
關(guān)于let關(guān)鍵字
- 暑期寫了2個(gè)月的angular2桶雀,最近重新學(xué)js矿酵,在看ES6的特性唬复,發(fā)現(xiàn)ES6出了let關(guān)鍵字,也就是說es6之后坏瘩,js也能定義塊級(jí)作用域的變量了盅抚。(在es6之前,定義變量用var倔矾,變量在函數(shù)作用域內(nèi)生效,但是沒有塊級(jí)作用域柱锹,var所定義的變量還是會(huì)出現(xiàn)混淆的情況)哪自。感覺要養(yǎng)成let定義變量的習(xí)慣。在下面舉一個(gè)簡單的例子:
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之前的所謂找不到出錯(cuò)的變量在哪個(gè)位置的bug胧华。
續(xù)更(2017/10/04)
- 昨天晚上寫完這篇文章,稍微搜索了下下面的問題宙彪,結(jié)果找到的資料有點(diǎn)少矩动,于是上某乎問了下這個(gè)問題:
- es6出了let關(guān)鍵字,是否意味著以后寫js定義變量多用let释漆,這樣就避免那些定位不到的bug悲没?
早上醒來得到了幾個(gè)評(píng)論,大概做下總結(jié):
- 這個(gè)問題其實(shí)只說對(duì)了一半男图。
- let關(guān)鍵字其實(shí)是為javascript增加了塊級(jí)作用域示姿,本質(zhì)上還是個(gè)變量,依舊能賦值改變逊笆,只要能賦值改變栈戳,改變了值就容易引入bug。
- es6為這個(gè)問題引入了const關(guān)鍵字难裆。
關(guān)于const關(guān)鍵字
-
const
聲明的變量不得改變值子檀,這意味著,const一旦聲明變量差牛,就必須立即初始化命锄,不能留到以后賦值。const聲明一個(gè)只讀的常量偏化。一旦聲明脐恩,常量的值就不能改變。而const與let一樣侦讨,都只是在塊級(jí)作用域內(nèi)有效驶冒。 - 綜上所述:能用const就不用let苟翻,如果需要一個(gè)變化的值,可以直接再定義一個(gè)const常量骗污,這樣能從本質(zhì)上避免很多關(guān)于變量定位的坑崇猫。當(dāng)然,如果用let定義能讓你節(jié)省下很多時(shí)間需忿,可以考慮用let诅炉。
- 參考資料:阮一峰-ECMAScript 6 入門