ES6

  • let命令

let命令存在塊級作用域,兩個變量分別使用var和let聲明兩個變量,然后在代碼塊之外調(diào)用這兩個變量,結(jié)果let聲明的變量報錯,var聲明的變量返回了正確的值;let暫時性死區(qū),只要塊級作用域內(nèi)存在let命令,所聲明的的變量就“綁定binding”這個區(qū)域,不再受外部影響

if (true) {
    var a = 10;
    let b = 20;
}
console.log(a); //10
console.log(b); //Uncaught ReferenceError: b is not defined

let不存在變量提升,用let聲明變量,極大的消除了代碼的潛在bug的隱患

//var的情況
console.log(foo);
var foo = 2;   //undefined
//let的情況
console.log(bar);
let bar = 2;   //ReferenceError: Cannot access 'bar'
  • const命令

聲明一個只讀的常量,一旦聲明,常量的值就不能改變

  • 箭頭函數(shù)

//定義函數(shù)
var f = function(v) {
    return v;
};
//箭頭函數(shù)
var f = v => v
  • 如果箭頭函數(shù)不需要參數(shù)或者多個參數(shù),就使用一個圓括號代表參數(shù)部分
let f = () => 5;
// 等同于
let f = function() { return 5 };
let sum = (num1, num2) => {
    return num1 + num2;
};
// 等同于
let sum = function(num1, num2) {
    return num1 + num2;
};
  • 如果只有一個參數(shù),那么圓括號可以省略
let f = str => {
  console.log(str);
}
f('hello');
  • 如果函數(shù)體的代碼只有一句,那么大括號可以省略
let f = str => console.log(str);
f('hello');
  • 如果函數(shù)體中的代碼只有一個return語句,那么return關鍵詞也必須省略
//這是錯誤的
let sum = (num1, num2) => return num1 + num2;
//這是正確的
let sum = (num1, num2) => num1 + num2;
  • 由于大括號被解釋為代碼塊,所以如果箭頭函數(shù)直接返回一個對象,必須在對象外面加上括號
let getTempItem = id => ({ id:id, name:'Temp' })
  • 使用箭頭函數(shù)簡化回調(diào)函數(shù)
let arr = [1,2,3];
// function函數(shù)寫法
arr = arr.map(function(x) {
    return x * x;
});
// 箭頭函數(shù)寫法
arr = arr.map(x => x * x);

包含constructo構(gòu)造方法,this關鍵字代表實例對象,定義“類”的方法時,前面不需要加function關鍵字,方法之間不需要逗號分隔,會報錯
constructor方法是類的默認方法,通過new命令生成對象實例時,自動調(diào)用該方法。一個類必須要有constructor方法,如果沒有顯式定義,一個空的constructor方法會被默認添加
constructor與普通構(gòu)造函數(shù)的區(qū)別:類的構(gòu)造函數(shù),不使用new是沒法調(diào)用的,會報錯。而constructor不用new也可以執(zhí)行

//定義類
class Point {
    constructor(x, y) {
        this.x = x;
        this.y = y;
    }
    toString() {
        return '(' + this.x + ', ' + this.y + ')';
    }
}
//創(chuàng)建對象
let p = new Point(1,2);
console.log(p.toString());
  • 模塊化實現(xiàn)

export命令:用于規(guī)定模塊的對外接口
import命令:用于輸入其他模塊提供的功能
  1. 接受一對大括號,里面指定要從其他模塊導入的變量名。大括號里面的變量名,必須與被導入模塊對外接口的名稱相同。
  2. 可以使用as關鍵字,將輸入的變量重命名。
  3. 具有提升效果,會提升到整個模塊的頭部,首先執(zhí)行。
  4. import是靜態(tài)執(zhí)行,所以不能使用表達式和變量,這些只有在運行時才能得到結(jié)果的語法結(jié)構(gòu)。
  5. 如果多次重復執(zhí)行同一句import語句,那么只會執(zhí)行一次,而不會執(zhí)行多次。
export default命令

為了給用戶提供方便,讓他們不用閱讀文檔就能加載模塊,就要用到export default命令,為模塊指定默認輸出。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • ES6簡介 ECMAScript 6.0(以下簡稱 ES6)是 JavaScript 語言的下一代標準,已經(jīng)在 2...
    凌雨微塵閱讀 1,174評論 0 3
  • 1、let和const命令 let聲明的變量只在let所在的代碼塊有效,即有塊級作用域,不同于var; let定義...
    風之化身呀閱讀 484評論 0 1
  • 1、es5和es6的區(qū)別,說一下你所知道的es6 ECMAScript5,即ES5,是ECMAScript的第五次...
    沒糖_cristalle閱讀 762評論 0 0
  • let 和 const 循環(huán)語句中,每次循環(huán)都會創(chuàng)建一個新的代碼塊作用域 var a = [];for (let ...
    _于曼麗_閱讀 312評論 0 0
  • [TOC] 參考阮一峰的ECMAScript 6 入門參考深入淺出ES6 let和const let和const都...
    郭子web閱讀 1,915評論 0 1

友情鏈接更多精彩內(nèi)容