## 簡單模塊化
1. 通過script標簽實現模塊化,但是依然會造成變量污染,而且還需要人為控制順序
2. 通過立即執行函數進行函數作用域的隔離
## nodejs的規范CommonJs
一個文件就是一個模塊,文件名就是模塊的名字,使用模塊的方法也和commonjs中一致,只需require就好了
```
module.export = add
var add = require('math');
```
缺點:
- 同步加載
- 不能非阻塞的并行加載多個模塊
## AMD:Asynchronous Module Definition異步模塊定義
示例
```
define("module", ["dep1", "dep2"], function(d1, d2) {
return someExportedValue;
});
require(["module", "../file"], function(module, file) { /* ... */ });
```
優點:
- 適合在瀏覽器環境中異步加載模塊
- 可以并行加載多個模塊
缺點:
- 提高了開發成本,代碼的閱讀和書寫比較困難,模塊定義方式的語義不順暢
- 不符合通用的模塊化思維方式,是一種妥協的實現
## CMD規范
與CommonJS和Node.js的 Modules 規范保持了很大的兼容性。在CMD規范中,一個模塊就是一個文件。
```
define(function(require, exports, module) {
var $ = require('jquery');
var Spinning = require('./spinning');
exports.doSomething = ...
module.exports = ...
})
```
### AMD和CMD的區別
1、對于依賴的模塊,AMD是提前執行,CMD是延遲執行。
2、AMD推崇依賴前置;CMD推崇依賴就近,只有在用到某個模塊的時候再去require。
## ES6模塊化
ES6 模塊的設計思想,是盡量的靜態化,使得**編譯時就能確定模塊的依賴關系**,以及輸入和輸出的變量,能夠提供更好的**變量類型檢查**。CommonJS和AMD模塊,都只能在運行時確定這些東西。
[參考鏈接](http://xieyufei.com/2017/02/19/JS-Standard.html)
- Houser的個人Wiki
- Javascript
- 語言基礎
- 變量
- 操作符整理
- new
- Ajax
- 事件
- 遍歷
- 字符串轉數字方法
- 原型鏈
- apply/call/bind
- 異步編程
- 模塊化
- 繼承的方式
- 對象的創建方式
- 內存泄漏
- js延遲加載
- 數據類型
- typeof
- 垃圾回收
- 作用域
- 閉包
- this
- es6
- 代碼片段
- 對象拷貝
- Node.js
- 模塊
- 庫&框架
- Jquery
- 優點
- 組件庫
- React
- React原理
- Key的作用
- JSX
- Redux
- Mobx
- 生命周期
- Typescript
- HTML&CSS
- viewport meta
- websocket
- webwork
- web GL
- html全局屬性
- iframe
- 頁面間通訊
- SVG
- 盒模型
- 輸入url到顯示的過程
- BFC(塊格式化上下文)
- 動畫
- CSS 秘密花園
- 前端
- webpack
- 后端
- nginx
- springboot
- 網絡
- 跨域
- 網絡攻擊
- TCP
- Https
- Http狀態碼
- 緩存策略
- Http2
- 數據結構&算法
- 常用數據結構
- 開發&編碼
- Git
- 分支策略
- 基本操作
- VSCode
- 工具
- App開發
- ReactNative
- 項目&業務
- Docker
- 協作工具
- 前端性能優化
- 登錄授權
- 軟件工程
- 漸進增強和優雅降級
- 計算機基礎
- 設計模式
- 單例模式
- 工廠模式
- 發布訂閱模式
- 適配器模式
- 代理模式
- 外觀模式
- 命令模式
- 橋接模式
- 模板模式
- 職責鏈模式
- 正則