🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
理解闭包之前我认为有必要了解javascript的变量作用域 # 变量作用域 JavaScript有两种变量:局部变量和全局变量。 * 局部变量:是指只能在本变量声明的函数内部调用。 * 全局变量:是整个代码中都可以调用的变量。 我们知道,在JS中变量是需要用var关键字声明的。但是JS中也可以隐式的使用变量,就是不用声明,直接使用。而且,千万注意,JS把隐式声明的变量总是当成全局变量来使用。 # 闭包 ## 概念 广泛的定义就是:能够访问另一个作用域中变量的函数 专家定义:闭包是指有权访问另一个函数作用于中的变量的函数 再精简一些就是:能访问局部变量的函数。 ## 特点(现象/结果/用法) 1. 函数嵌套函数(函数内部又有函数) 2. 函数内部可以访问函数外部的参数和变量 3. 能够将变量保存在内存中(函数变量和参数不会被GC回收) ## 包含的要点 1. 函数声明的时候,会生成一个独立的作用域 2. 同一作用域的变量可以互相访问 3. 作用域成层级包含关系,形成作用域链。子作用域的变量可以访问父作用域的变量,反之不能;另外子作用域会使用最近的父作用域的变量 ## 优缺点 优点: * 可以将一个变量长期驻扎在内存中 * 避免全局变量的污染 * 私有成员的存在 缺点: 常驻内存,增大内存消耗,使用不当可能会造成内存泄漏 ## 自执行函数的好处 * 隔离作用于,避免全局作用于污染 * 模拟块级作用域