Javascript闭包
什么是闭包?
我们要想知道什么是闭包首先需要了解js 的一个机制,我们都知道函数的执行方式是在函数调用时在内存区域开辟一个新的执行空间,当函数执行完毕时执行空间销毁。那么我们看下面这个情况
图中在text方法中定义了一个对象并返回了出来,并把这个返回值赋值给了a我们都知道对象的赋值得到的地址,这个地址是存在在函数执行空间中的,所以一旦函数的返回值是一个复杂数据类型(就是赋值时得到的时地址)的时候那么这个函数执行空间在执行完毕时就不会销毁。
知道这个机制之后我们再看一个简单的闭包
闭包的生成条件是在text1函数中返回一个函数,并且这个函数中要使用到text1函数的私有变量,外部有一个参数接受text1函数的返回值,如图就形成了一个简单闭包。
闭包的应用
任何在函数中定义的变量,都可以认为是私有变量,因为不能在函数外部访问这些变量。私有变量包括函数的参数、局部变量和函数内定义的其他函数。
把有权访问私有变量的公有方法称为特权方法(privileged method)。
使用闭包的注意点
- 由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
- 闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。
闭包的特点
- 延长了变量的生命周期
- 优点: 因为执行空间不销毁, 变量也没有销毁
- 缺点: 因为执行空间不销毁, 会一直存在在内存
- 可以访问函数内部的私有变量
- 优点: 利用闭包函数可以访问函数内部的私有变量
- 缺点: 执行空间不会销毁, 会一直存在在内存中
- 闭包的致命缺点
- 因为当一段内存空间中有一个不会被销毁的东西一直存在,那么就会出现内存占用, 如果过多, 就会导致内存溢出,那么结果就是内存泄漏
ps
第一次发帖有点紧张,嘻嘻,有不足之处望大佬们提醒。小弟没太多特长,今生可能就干死在这个行业了,加油💪努力前进。最后用曾子的一句话也是我最喜欢的一句镇下帖子,士不可以不弘毅,任重而道远。