为什么需要闭包呢?
由于局部变量无法共享和长久的保存,而全局变量可能造成变量污染,然而闭包既可以长久的保存变量又不会造成全局污染。
闭包是什么?
闭包是指有权访问另一个函数作用域中的变量的函数,创建闭包最常用的方式就是在一个函数内部创建另一个函数。
闭包是一种特殊的对象。它由两部分构成:函数,以及创建该函数的环境。环境由闭包创建时在作用域中的任何局部变量组成。
怎么创建闭包?
在另一个函数里使用了关键字function,一个闭包就被创建了
在一个函数内部使用了eval(),一个闭包就被创建了。
在一个函数内部使用new function(...)
(即构造函数时,它不会创建闭包(新函数不能引用外部函数的局部变量)
闭包的作用:
闭包的最大用处有两个,一个是可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
tip:
函数内部声明变量的时候,一定要使用var命令,如果不用的话,你实际上声明了一个全局变量!
根据作用域链的规则,底层作用域没有声明的变量,会向上一级找,找到就返回,没找到就一直找,直到window的变量,没有就返回undefined。
闭包的弊端:
闭包对脚本性能具有负面影响,包括处理速度和内存消耗。
由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题
闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象使用,把闭包当作它的公用方法,把内部变量当作它的私有属性,这时一定要小心,不要随便改变父函数内部变量的值。