前言
- 闭包是每一个前端开发必须掌握的内容。
- 笔记中有些个人理解后整理的笔记,可能有所偏差,也恳请读者帮忙指出,谢谢。
免责声明
- 为了方便,本文中使用的部分图片来自于网络,如有侵权,请联系博主进行删除,感谢其他博主提供的图床。
- 此笔记用于记录本人对于该知识的汇总。以方便日后的工作与学习。
- 如有侵权请告知,马上删除。
【是什么?】
-
闭包就是能够读取其他函数内部变量的函数。(即定义在一个函数内部的函数)
-
变量:
- 全局变量:函数内部可以直接读取
- 局部变量:函数内部的变量,函数外部无法读取
-
链式作用域:子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。
-
【为什么要用闭包?】
【作用】
- 获取到函数内部的局部变量。
- 让这些变量的值始终保持在内存中,不会在外部函数调用后被自动清除。
【缺点】
- 导致内存泄露
- 由于使用闭包后的变量会一直保存在内存中,导致内存消耗很大。
- 【解决办法】在退出函数之前,将不使用的局部变量全部删除。
- 闭包会在父函数外部,改变父函数内部变量的值。
- 【解决办法】把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value)
【怎么生成闭包?】
【示例】1. 获取到函数内部的局部变量(f2函数获取到f1函数的变量)
function f1(){
var n=999;
function f2(){
alert(n); // 999
}
}
【示例】2. 让变量不会在外部函数调用后被自动清除
var add = (function () {
var counter = 0;
return function () {
return counter += 1;}
})();
add();
add();
add();
【好文推荐】
[1] 什么是闭包?闭包的优缺点?