ECMA2015(也稱es6)渤刃,在原先javascript語(yǔ)法基礎(chǔ)上新增語(yǔ)法特征泉手,瀏覽器對(duì)es6的語(yǔ)法支持還不夠骆姐,需要借助babel解析工具(可在gulp的配置文件gulpfile.js中配置針對(duì)bable的命令)笔呀;
關(guān)于作用域:除了全局作用域和函數(shù)內(nèi)作用域幢踏,es6新增了塊級(jí)作用域,即用{}包裹的代碼塊许师。塊級(jí)作用域:內(nèi)層變量和外層變量的值互不影響房蝉。內(nèi)層無(wú)法讀取外層僚匆,外層無(wú)法讀取內(nèi)層。
{
console.log(b); //報(bào)錯(cuò)搭幻,
{let a=12;let b=0;}
console.log(a) //報(bào)錯(cuò)咧擂,
}
ES6允許在塊級(jí)作用域內(nèi)定義函數(shù)(但在老的瀏覽器中還是報(bào)錯(cuò),所以該特性還是盡量不用)檀蹋;
let:es6中聲明變量新增的方式
特性:
①聲明僅在所在的代碼區(qū)塊內(nèi)有效松申;(es6新增塊級(jí)作用域)
{let a=12} ;
alert(a); //報(bào)錯(cuò),a is not define
該特性可用于在for循環(huán)中聲明變量
for(let i=0;i<10;i++){} //變量i僅在循環(huán)體內(nèi)部生效俯逾。
console.log(i) //i is not define
②不存在變量提升贸桶;
alert(a) //undefined
alert(b)// 報(bào)錯(cuò), b is not defined
var a=12;
let b=11;
③暫時(shí)性死區(qū)桌肴;
在一段代碼區(qū)塊內(nèi)庶橱,使用let或const聲明變量唠叛,在變量聲明前對(duì)變量的使用都會(huì)報(bào)錯(cuò)。即使在代碼塊外部有同名的全局變量。
var abc=100;
{
abc=23; //referenceError 聲明前使用寓搬,報(bào)錯(cuò)
let abc; //當(dāng)let或const在代碼塊內(nèi)聲明了,則在代碼塊中形成了封閉的區(qū)域撑螺,在該封閉區(qū)域內(nèi)變量聲明前的使用都會(huì)報(bào)錯(cuò)咏雌。
console.log(abc); //undefined
abc=10;
console.log(abc)//10
}
const命令:es6新增聲明常量方式;
特性:
①聲明時(shí)就需要賦值悉稠,否則報(bào)錯(cuò)宫蛆;常量一旦聲明不可以重新賦值,否則報(bào)錯(cuò)的猛;
②在所在的代碼區(qū)塊內(nèi)有效耀盗;(同let);
③不存在變量提升卦尊;
④存在暫時(shí)性死區(qū)叛拷;
⑤聲明復(fù)雜型常量時(shí),const僅僅保存了地址岂却,常量中的屬性還是可以變更的忿薇;
例如:const obj={};
const arr=[];
arr.push(12);
arr.length=0;
arr ?=?['hello'] ?//報(bào)錯(cuò)
obj.a=1;
console.log(obj.a) ? // ?1
obj={'b':2} ?//報(bào)錯(cuò)
(可凍結(jié)對(duì)象,凍結(jié)后對(duì)象屬性將不能修改躏哩;Object,freeze({'需要凍結(jié)的對(duì)象參數(shù)'}))署浩;
REPL:nodejs中的交互運(yùn)行環(huán)境,可執(zhí)行javascript語(yǔ)句扫尺。
全局對(duì)象;原有javascript的全局對(duì)象是window筋栋,給全局對(duì)象的屬性賦值相當(dāng)于聲明一個(gè)全局變量。
在ES6中正驻,let和const命令聲明的變量和常量不再是全局對(duì)象的屬性弊攘。
var a=1;
let b=2;
window.a ? //1
window.b ?// undefined