浅谈js闭包
什么是闭包
MDN的定义:一个函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起(或者说函数被引用包围),这样的组合就是闭包(closure)。也就是说,闭包让你可以在一个内层函数中访问到其外层函数的作用域。在 JavaScript 中,每当创建一个函数,闭包就会在函数创建的同时被创建出来。
我们可以把闭包简单理解成"定义在一个函数内部的函数"。内部函数总是可以访问其所在的外部函数中声明的变量,即使在其外部函数被返回(寿命终结)了之后。所以,闭包让外部访问函数内部变量成为可能,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
闭包有哪些特点
闭包让外部访问函数内部变量成为可能;
可以避免使用全局变量,防止全局变量污染;
局部变量会常驻在内存中,会造成内存泄漏(有一块内存空间被长期占用,而不被释放),所以不能滥用闭包,否则会造成网页的性能问题;
每次外部函数执行的时候,都会重新创建一个新的地址。但凡是外部函数中有被内部函数引用的数据,那么这个时候,这个数据一直不删除,保留一根指针给内部函数。闭包找到的是同一地址中外部函数中对应变量最终的值;
闭包的应用举例
function fn(){
var i = 0
return function(){
i++
console.log(i)
}
}
var counter1 = fn() //每次外部函数执行的时候,都会开辟一块内存空间,创建一个新的地址
counter1() //1
counter1() //2
var counter2 = fn()
counter2() //1
counter2() //2

浙公网安备 33010602011771号