一、es6簡(jiǎn)介
????ECMAScript??是一個(gè)標(biāo)準(zhǔn)
????ECMAScript??5.1??es5??2011年發(fā)布
????es6就是es5的下一個(gè)版本
????????2015.6發(fā)布es6的第一版 es2015 ; 2016.6發(fā)布es6的第二個(gè)版本??es2016??; 2017發(fā)布es6的第三個(gè)版本??es2017
????????es6是涵蓋了es2015,es2016,es2017等版本
????????es6是嚴(yán)格版的es5
????????html5 和 xhtml1.0
????????"use strict";
嚴(yán)格模式下:
1.嚴(yán)格模式下不允許使用沒(méi)有經(jīng)過(guò)var聲明的變量
?? ??? ??? ?2.this指向的是undefined,因?yàn)闆](méi)有所有者,
?? ??? ??? ??? ??? ?好處:避免在函數(shù)內(nèi)容訪問(wèn)全局作用域
3.delete
?? ??? ??? ??? ?? ??1).delete不能刪除var定義的變量,2.沒(méi)有在嚴(yán)格模式下 delete可以刪除var聲明的變量或函數(shù)
?? ??? ??? ??? ??? ?2).沒(méi)有寫嚴(yán)格模式的時(shí)候形參名字一樣的時(shí)候打印形參會(huì)是后面的實(shí)參2.在嚴(yán)格模式下,參數(shù)名不能相同
?? ??? ??? ??? ?? ? 3).嚴(yán)格模式下,不接受系統(tǒng)保留字或者關(guān)鍵字
二。es6基礎(chǔ)語(yǔ)法
????1.let
????????es6新增的聲明變量的關(guān)鍵字
????????類似于var 但有所不同:
????????不同:
????????????1)作用域不同
????????????????var 聲明的變量可以在大括號(hào)外調(diào)用,let聲明的變量只能在代碼塊內(nèi)部有效
????????????????代碼塊:我們認(rèn)為一個(gè)大括號(hào)可以封閉一個(gè)代碼塊
????????????2)沒(méi)有變量提升(只提升聲明部分,不提升賦值部分)
????????????3)暫時(shí)性死區(qū)
????????????????使用let聲明之前的變量都是不可用的
????????????4)不允許重復(fù)聲明
????????????????let不允許在相同作用域內(nèi)部重復(fù)聲明同一個(gè)變量,所以也是不允許在函數(shù)中重新聲明參數(shù)
????2.塊級(jí)作用域
????????1)es5??只有兩個(gè)作用域??全局作用域和函數(shù)作用域,沒(méi)有塊級(jí)作用域
????????2)let??為js增加了塊級(jí)作用域
????????3)es6??允許塊級(jí)作用域嵌套
????????4)外層作用域無(wú)法讀取內(nèi)層作用域的變量
????????5)內(nèi)層作用域可以定義與外層作用域的同名變量
????????6)IIFE被拋棄
????????7)塊級(jí)作用域與函數(shù)聲明
????????????es5 只允許在頂層作用域或函數(shù)作用域中聲明函數(shù),不能在塊級(jí)作用域中聲明函數(shù)
????????????es6 引入了塊級(jí)作用域,明確允許在塊級(jí)作用域中聲明函數(shù)
????????????es6 中在塊級(jí)作用域中聲明函數(shù)相當(dāng)于使用了let,在塊級(jí)作用域以外是不能調(diào)用的
????????8)do??表達(dá)式(暫時(shí)不能用)
????????????塊級(jí)作用域是一個(gè)語(yǔ)句,將多個(gè)操作封裝在一起,沒(méi)有返回值
????????????在塊級(jí)作用域以外,沒(méi)有辦法得到內(nèi)部的值,除非是全局變量
????????????一個(gè)提案,使塊級(jí)作用域可以變?yōu)楸磉_(dá)式,也就是說(shuō)可以返回值,就是使用do
????3.const常量
????????1)const??聲明一個(gè)常量,一旦聲明,就不能被改變
????????2)常量一旦聲明,必須立即初始化,不能留到以后賦值
????????3)const本質(zhì)
????????????const本質(zhì)并不是值不讓改變而是變量指向的內(nèi)存地址不得改動(dòng),對(duì)于基本數(shù)據(jù)類型,值就保存在變量指向的內(nèi)存地址,所以不能被改變,但是對(duì)于對(duì)象類型,變量存儲(chǔ)的只是一個(gè)指針,const能保證這個(gè)指針不變,但是數(shù)據(jù)結(jié)構(gòu)是可以改變的
????????????如果const定義一個(gè)數(shù)組,數(shù)組本身是可寫的,但是要想將一個(gè)新的數(shù)組賦值給這個(gè)arr,就會(huì)報(bào)錯(cuò)
????4.頂層對(duì)象
????????es5中頂層對(duì)象是window,頂層對(duì)象的屬性與全局變量是等價(jià)的
????????es6規(guī)定,var 和??function命令是全局變量,依舊是頂層對(duì)象的屬性,但是let和const,class命令的全局變量不屬于頂層對(duì)象的屬性,也就是說(shuō)es6開始,全局變量逐漸與頂層對(duì)象的屬性脫鉤
??????es6??兼容瀏覽器
??????1)允許塊級(jí)作用域聲明函數(shù)
??????2)函數(shù)聲明類似于var,會(huì)將函數(shù)聲明提升到全局作用域或函數(shù)作用域的頭部
??????3)函數(shù)聲明會(huì)提升到塊級(jí)作用域的頭部
??????這三條規(guī)則在瀏覽器的es6環(huán)境下使用