在運用react、vue等流行框架到時候,我們發現每個**塊都是分離的,每個js檔案中定義的內容都只在本區域有作用。這就是es6引入的模組化的概念,在此之前,乙個應用的每個js檔案所定義的所有內容都由全域性作用域共享。
模組與指令碼的不同
模組的載入方式是與js原先指令碼載入方式有所區別的
1、模組**自動執行在嚴格模式下,並且沒有辦法跳出嚴格模式
2、在模組的頂級作用域建立的變數,不會被新增到共享的全域性作用域
3、模組頂級作用域的this值為undefined
4、模組不允許在**中使用html風格的注釋
5、對於模組外的**需要訪問的**,模組必須匯出它們
6、允許模組從其它模組匯入內容
模組中的關鍵字
export關鍵字可以將需要匯出的**部分公開給其他模組
import關鍵字可以訪問已被匯出的**部分
as 關鍵字可以在匯入模組指定新名稱
default關鍵字可以設定模組中的乙個預設匯出(唯一)
例
// 匯出模組 example.js
export const name = "地瓜"
export const age = "24"
export default function sum(num1, num2)
// 匯入模組
import sum, from "./example.js"
// 需要注意預設值不能用花括號包裹除非下列寫法
// import sum, from "./example"
console.log(person, age) // "地瓜", "24"
console.log(sum(1,2)) // 3
**的概念是我們可以通過建立乙個**物件來替代另乙個物件,並且能攔截這個物件底層操作,包括set、get、has等行為,這個攔截並響應的函式稱為陷阱。
es6中引入了乙個proxy構造器來建立乙個**,需要傳入兩個引數。目標物件和乙個定義了乙個或多個陷阱函式的處理器。
reflect物件
reflect物件代表的是反射介面,也就是上述提到陷阱函式的乙個集合。
舉乙個栗子
let person =
let proxy =
newproxy
(person,)}
return reflect.
set(traptarget, key, value, receiver)}}
)proxy.count =1;
console.
log(proxy.count)
// 1
console.
log(person.count)
// 1 **物件的行為反射到了源物件
proxy.another =
"xiaoxiao"
// 報錯
es6學習總結
一 let和const 1.let宣告的變數只在它所在的 塊有效。2.let宣告的變數僅在塊級作用域內有效。3.不存在變數提公升。4.每個let宣告的變數都有各自的作用域。它所宣告的變數一定要在宣告後使用,否則報錯 5.暫時性死區 只要塊級作用域內存在let命令,它所宣告的變數就 繫結 bindin...
ES6學習總結
1.建立 let x newset 2.特性 對基本資料型別,會自動去重 3.方法 x.add 新增 x.delete 刪除 x.has 刪除是否存在,返回布林 x.clear 清空 x.keys 返回鍵名的遍歷器 x.values 返回鍵值的遍歷器 x.foreach function 遍歷 ar...
ES6學習總結 四
與大多數物件導向語言不同,js建立之初不支援類,在es1 es5很多庫建立了一些工具來讓js顯得好像支援類 直到es6正式引入類。es6類的宣告是以class關鍵字開始後面緊跟類名,類宣告中有constructor方法可以直接定義乙個構造器。例class personclass 類和之前的函式構造器...