1. 闭包:
即重用一个变量,又保护变量不被污染的一种机制。
2. 为什么使用闭包 :
全局变量和局部变量都具有不可兼得的优缺点。
全局变量: 优: 可重用, 缺: 易被污染。
局部变量: 优: 仅函数内可用,不会被污染。
缺: 不可重用!
3. 何时使用: 只要即重用一个变量,又保护变量不被污染时。
如何使用:
1. 用外层函数包裹要保护的变量和内层函数。
2. 外层函数将内层函数返回到外部。
3. 调用外层函数,获得内层函数的对象,保存在外部的变量中——形成了闭包。
4. 闭包形成的原因:
外层函数调用后,外层函数的函数作用域对象无法释放,被内层函数引用着。
5. 闭包的缺点:
比普通函数占用更多的内存。
解决:闭包不在使用时,要及时释放。
将引用内层函数对象的变量赋值为null。
========================
6. 示例代码。
'use strict'
function outer(){
let i = 1; // i作用域在outer函数中,按理说函数调用完后,i所占的内存释放掉。
return function innerFunc(){ // 因为返回值是一个函数,函数中引用了outer作用域的i,所以形成闭包,i一直在内存中。
console.log(i++);
}
}
let f = outer(); //形成闭包,闭包中的i变量一直在内存中。f的作用域是全局作用域,但是依然可以访问outer函数的作用域,归功于闭包的使用。
f(); // 1 连续调用两次,第二次和第一次调用使用的是同样一个i.
f(); // 2
f = null; // 释放闭包所占用的内存
7. 参考
https://www.cnblogs.com/jiajialove/p/9049612.html