一、ECMAScript 6javascript
javascript組成: ECMAScript、BOM、DOMjava
ES6指的是ECMAScript的版本,2015年6月正式經過數組
二、let命令數據結構
用法相似於var,可是所聲明的變量只在let命令所在的代碼塊內有效函數
var b = new Array()
for (let i = 0; i < 3; i++) { b[i] = i } console.log(i)
報錯:Uncaught ReferenceError: i is not definedspa
可是,換成var會正常輸出 3指針
js做用域,不像其餘大部分語言都是塊做用域,它是函數做用域,只有函數裏聲明的變量纔是局部變量,外部不能引用,而if、for等語句塊中的變量,從聲明開始直至銷燬都是全局的。所以,有些地方使用var會以爲有點「坑」,增長了let命令以後,至關於給js增長了塊級做用域,能夠避免code
var a = new Array() for(var i=0;i<6;i++){ a[i] = function(){ console.log(i) } } a[3](); //輸出 6
上述代碼中,i使用var聲明的,而且是在語句塊中,因此它是全局變量,每一次循環,變量的i值都會發生改變,而循環內的i指向的也是全局變量i,而執完循環體後,i的值爲6,因此最後console.log(i)的輸出也是6 對象
var a = new Array() for(let i=0;i<6;i++){ a[i] = function(){ console.log(i) } } a[3]() //輸出3
上述代碼惟一的區別就是,i使用let聲明。因爲i是在塊內起做用,也就是本次的循環中有效,因此每一次循環都會開闢一個新的地址存放,而且,js引擎會記住上一次的值,初始化本輪的變量i時,就會使用上一次i的值。因此最終輸出的是 3blog
let無變量提高,也就是必須先聲明再使用,不然會報錯。ES6規定,若是區塊中存在let和const命令,這個區塊對這些命令聲明的變量從一開始就造成了封閉做用域。
let不容許在相同做用域內,重複聲明同一個變量
三、const命令
const聲明一個只讀的常量。一旦聲明,常量的值就不能改變。其本質是變量指向的地址不容許改動,針對數字、字符串、布爾值,值就保存在變量指向的內存地址,所以等同於常量,但對於複合類型的數據,主要是對象和數組,變量指向的內存地址是指針,其數據結構能夠變。因此將對象或數組聲明爲const須要注意,其內容不必定是不變的。
const a; a = 11; console.log(a)
//輸出報錯 Uncaught SyntaxError: Missing initializer in const declaration
const常量,聲明後必須賦值,而且對於簡單的數據類型是不能夠更改,但對於複雜數據類型,能夠增減內容,可是不能改變地址
const a = 11; a = 12; console.log(a) //Uncaught TypeError: Assignment to constant variable. const b = {m:33} b.n = 22 console.log(b) // {m: 33, n: 22}
const c = [1,2,3,4];
let b = [1,2,3,4];
c = b;
console.log(c)
// Uncaught TypeError: Assignment to constant variable.