### 让你分分钟理解 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后端代码
- 小程序列表循环、传参、显示、接收
- 常用链接
- 环境常用操作手册