proxy代理的坑
-
var obj = {index:`index`} var newObj = new Proxy(obj,{ get:(target,key)=>{ console.log(target) // {index: "index"} return target[key]+123; // return target.key 如果這塊這樣返回的話訪問newObj.index就會報undefined } }) newObj.index // index123 實踐中遇到這樣的問題,但是具體什麼原因還還弄清楚,有誰希望大家在底部留言告知,不勝感激
es6中模組與commonJs的區別
ES6 模組的設計思想,是儘量的靜態化,使得編譯時就能確定模組的依賴關係,以及輸入和輸出的變數。
-
CommonJS 模組就是物件,輸入時必須查詢物件屬性;ES6 模組不是物件,而是通過export命令顯式指定輸出的程式碼,再通過import命令輸入。
``` // CommonJS模組:這種引入方式只有在執行時載入,並且把整個fs物件引入,不能夠靜態載入 let { stat, exists, readFile } = require(`fs`); // ES6模組:es6的模組中的每一個元件都是獨立的,這樣引入只把對應元件引入,能夠靜態載入(這就導致無法動態的載入需要模組,實現模組的按需載入) import { stat, exists, readFile } from `fs`; ```
-
import命令接受一對大括號,裡面指定要從其他模組匯入的變數名。大括號裡面的變數名,必須與被匯入模組(profile.js)對外介面的名稱相同。
var a={name:`zhangsan`,sex:`man`}; export {person as a}; import {personX as person} form `./person.js`;
-
import命令有自動提升的功能,會自動提升到檔案的頂部,所以在檔案中只要我們引入即可使用,不需要考慮引入的位置,與let相反
console.log(personX); // {name:`zhangsan`,sex:`man`};這樣不會報錯 import {personX as person} form `./person.js`;
-
import是靜態執行,所有在引入元件過程中能不能摻雜任何表示式
// 報錯 if (x === 1) { import { foo } from `module1`; } else { import { foo } from `module2`; } import `lodash` // 這樣會直接執行模組
- import命令與require命令同時存在時會先執行import命令,因為import在靜態解析階段執行,所以它是一個模組之中最早執行的。
-
import與export結合使用
export { es6 as default } from `./someModule`; // 等同於 import { es6 } from `./someModule`; export default es6; 這樣暴露在另一個檔案中引入的時候就可以 import anyName from `es6`;
- import()類似於commonJs的require()區別是前者是非同步執行,後者是同步執行
擴充套件
- module.exports==export.default,這樣暴露引入的時候就可以任意指定模組名稱,exports暴露引入時只能用{}把內部元件包裹起來