### 讓你分分鐘理解 JavaScript 閉包
> 閉包,是 Javascript 比較重要的一個概念,對于初學者來講,閉包是一個特別抽象的概念,特別是 ECMAScript 規范給的定義,如果沒有實戰經驗,很難從定義去理解它。因此,本文不會對閉包的概念進行大篇幅描述,直接上干貨,讓你分分鐘理解閉包!
### 閉包,一睹為快
> 在接觸一個新技術的時候,我首先會做的一件事就是找它的 demo。對于我們來說,看代碼比自然語言更能理解一個事物的本質。其實,閉包無處不在,比如:jQuery、zepto的核心代碼都包含在一個大的閉包中,所以下面我先寫一個最簡單最原始的閉包,以便讓你在大腦里產生閉包的畫面:
```
function A(){
function B(){
console.log('Hello Closure!');
}
return B;
}
var C = A();
C();// Hello Closure!
```
這是最簡單的閉包。
有了初步認識后,我們簡單分析一下它和普通函數有什么不同,上面代碼翻譯成自然語言如下:
* 定義普通函數 A
* 在 A 中定義普通函數 B
* 在 A 中返回 B
* 執行 A,并把 A 的返回結果賦值給變量 C
* 執行 C
把這5步操作總結成一句話就是:
* 函數A的內部函數B被函數A外的一個變量 c 引用。
* 把這句話再加工一下就變成了閉包的定義:
* 當一個內部函數被其外部函數之外的變量引用時,就形成了一個閉包。
* 因此,當你執行上述5步操作時,就已經定義了一個閉包!
這就是閉包。
- JavaScript
- JS定義要點
- 數字千分位逗號隔開
- 數組排序
- JS字符串拼接,加逗號
- 日期計算周次
- JSON
- JS數組去重
- javascript 函數調用(HOT)
- 數組和對象重新組合,定義
- 遍歷數組,循環內容輸出,添加class
- JSON常用字段新增,對象數組重組
- js 獲取對象的鍵和值,重新組合
- 取對象的鍵和值,重組數組
- 清除數組里為空的值
- JavaScript 變量提升
- JavaScript 閉包
- JavaScript random() 隨機數
- js 多久內送到;設置當前時間延后20分鐘到達,成新時間點
- javascript 判斷當前時間是否在一個時間段內; 是否周六或者周日
- 設置當前時間延后30分鐘到達 成新時間點
- JS倒計時demo
- 數組拼接
- 時間轉換成 yy/mm/dd
- 通過字段返回信息進行文本渲染
- JavaScript replace()方法
- (去重)js計算數組里的對象的某個值相同,其余值相加
- (去重)JS比較兩個數組對象,取出不同的值
- (判重)數組對象判斷內容是否相同,分組,相同的生成對應的標簽
- JS 三元表達式(多條件)
- Typescript
- TS要點定義
- ECMAScript 6
- 模板字符串
- class語法
- JavaScript 雜談
- get和post請求的區別?
- js的事件冒泡和時間捕獲?
- 本地存儲 localStorage 和 sessionStorage 和 cookie
- WebPack和Grunt以及Gulp相比有什么特性
- js對象淺拷貝和深拷貝
- JQ事件委托
- JS如何判斷數組是Array類型
- HTML/CSS
- transform 瀏覽器識別碼
- ul li{} 和 ul>li{} 樣式的區別
- HTML-新建模板
- css 上 右 下 左 空心 箭頭
- opacity 標簽透明:div 連帶內容都被設置?
- flex 彈性布局-div之間間距問題
- CSS3 標題-線動畫-備注
- BootStrap 響應式布局
- node.js
- nodejs 本地方開發接口,配置
- node開發接口, 環境及配置,demo
- nodejs--express接收post請求參數;安裝 body-parser依賴
- mysql
- Mysql 分頁查詢及動態傳參;
- 主表和子表 一對多關系 如何查出主表信息和子表條數
- Mysql 常用命令
- Mysql 表數據聯動及插入,表A數據PUSH到表B
- char(10) 和 varchar(10) 主要的區別是什么?
- Vue.js
- vue 組件快速模版
- vue 組件的顯示隱藏,動畫效果;
- Vue 組件之間的傳值,路由傳參
- VUE中演示v-for為什么要加key
- vue 項目中引入公共方法
- Vue v-for 循環數組、對象、數字時 參數的順序
- vue 定時器常規操作及其停止
- vue常用知識點匯總
- Vue項目如何實現國際化?基于vue-i18n實現國際化經驗
- vue-i18n進行多語言切換?input標簽里面placeholder屬性
- vue中使用base64和md5
- vue 生產環境部署打包時配置;頁面不加載?字體不加載?
- vue-項目引入iview 主題定制-變量覆蓋;問題及其bug
- PHP
- 用PHP寫第一個接口
- PHP-JSON格式demo
- php 數組的循環、新加
- 微信小程序
- 微信小程序關于獲取用戶的openid的php后端代碼
- 小程序列表循環、傳參、顯示、接收
- 常用鏈接
- 環境常用操作手冊