javascript
ES6 新特性之 let, const : JavaScript在变量方面的改进。
let : 塊級作用域
我們知道,JavaScript是沒有塊級作用域的,如果在塊內(nèi)使用var聲明一個(gè)變量,它在代碼塊外面仍舊是可見的:
if (true) {var foo = 3; } console.log(foo); // 3for (var i = 0; i < 9; i++) {var j = i; } console.log(i); // 9 console.log(j); // 8可以看到,在上面代碼中,我們雖然是在塊內(nèi)聲明的變量,但代碼塊執(zhí)行完畢后,依然可以訪問到相應(yīng)的變量,說明JavaScript中沒有塊級作用域的。
而ES6規(guī)范給開發(fā)者帶來了塊級作用域(終于跟 C,Java,Kotlin 等語言保持一致了),如果把var換成let命令,我們就可以獲得一個(gè)塊級變量:
if (true) {let foo = 3; } console.log(foo); // Uncaught ReferenceErrorfor (let i = 0; i < 9; i++) {let j = i; } console.log(i); // Uncaught ReferenceError console.log(j); // Uncaught ReferenceError從上面代碼可以看出,塊內(nèi)聲明的變量,塊外是不可見的,如果試圖引用一個(gè)塊內(nèi)用let聲明的變量,就會引發(fā)一個(gè)異常。
let約束了變量提升, ES6中的let命令規(guī)范了變量的聲明,約束了變量提升,也就是說,我們必須先聲明,然后才可以使用: 永遠(yuǎn)將變量聲明置于當(dāng)前作用域頂部:
function nonHoistingFunc() {let foo = 3;console.log('foo:', foo); // 3 }nonHoistingFunc();const 變量: 引用不可變
以上let所介紹的規(guī)則均適用于const命令,不同的是,const聲明的變量不能重新賦值。也就是 Java 中的 final,Kotlin 中的 val。
也是由于這個(gè)規(guī)則,const變量聲明時(shí)必須初始化,不能留到以后賦值,所以下面的代碼是不合法的:
const a = 3; a = 5; // Uncaught TypeError: Assignment to constant variable const b; // Uncaught SyntaxError: Missing initializer in const declaration以上就是let和const的內(nèi)容,可以看出,let和const大大改進(jìn)了ES5的變量機(jī)制,使得JS更嚴(yán)謹(jǐn)和規(guī)范,隨著ES6支持程度的提高,我們應(yīng)該開始習(xí)慣let和const的使用了。
參考資料:
http://es6.ruanyifeng.com/#docs/let
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const
http://stackoverflow.com/questions/31219420/are-variables-declared-with-let-or-const-not-hoisted-in-es6
總結(jié)
以上是生活随笔為你收集整理的ES6 新特性之 let, const : JavaScript在变量方面的改进。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 微信公众请求config php,微信公
- 下一篇: 首域微交易分析师一对一服务
