ECMAScript 6 -- let和const命令
生活随笔
收集整理的這篇文章主要介紹了
ECMAScript 6 -- let和const命令
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
ES6新增了let命令,用來聲明變量。它的用法類似于var,但是所聲明的變量,只在let命令所在的代碼塊內有效。
for (let i = 0; i < 10; i++) {console.log(i);}可以執行
for (let i = 0; i < 10; i++) {}console.log(i);就會報錯
ncaught ReferenceError: i is not definedat <anonymous>:3:13at Object.InjectedScript._evaluateOn (<anonymous>:145:167)at Object.InjectedScript._evaluateAndWrap (<anonymous>:137:25)at Object.InjectedScript.evaluate (<anonymous>:118:14)let var使用區別:
var:
var a = []; for (var i = 0; i < 10; i++) {a[i] = function () {console.log(i);}; } a[6]();結果:
10變量i是var聲明的,在全局范圍內都有效,所以全局只有一個變量i。每一次循環,變量i的值都會發生改變,而循環內被賦給數組a的function在運行時,會通過閉包讀到這同一個變量i,導致最后輸出的是最后一輪的i的值,也就是10。
let:
var a = []; for (let i = 0; i < 10; i++) {a[i] = function () {console.log(i);}; } a[6]();結果:
6
變量i是let聲明的,當前的i只在本輪循環有效,所以每一次循環的i其實都是一個新的變量,所以最后輸出的是6。
?
for循環還有一個特別之處,就是循環語句部分是一個父作用域,而循環體內部是一個單獨的子作用域。
不存在變量升級:
// var 的情況 console.log(foo); // 輸出undefined var foo = 2;// let 的情況 console.log(bar); // 報錯ReferenceError let bar = 2; VM171:2 undefined報錯:
VM171:6 Uncaught ReferenceError: bar is not definedat <anonymous>:6:13at Object.InjectedScript._evaluateOn (<anonymous>:145:167)at Object.InjectedScript._evaluateAndWrap (<anonymous>:137:25)at Object.InjectedScript.evaluate (<anonymous>:118:14)(anonymous function) @ VM171:6InjectedScript._evaluateOn @ VM68:145InjectedScript._evaluateAndWrap @ VM68:137InjectedScript.evaluate @ VM68:118?
總結
以上是生活随笔為你收集整理的ECMAScript 6 -- let和const命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html元素以开始标签起始,HTML文本
- 下一篇: $(document).scrollTo