JavaScript 什么是闭包?
闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,创建的函数可以访问到当前函数的局部变量。
闭包有两个常用的用途。
1.使我们在函数外部能够访问到函数内部的变量。通过使用闭包,我们可以通过在外部调用闭包函数,从而在外部访问到函数内部的变量,可以使用这种方法来创建私有变量。
2.使已经运行结束的函数上下文中的变量对象继续留在内存中,因为闭包函数保留了这个变量对象的引用,所以
这个变量对象不会被回收。
其实闭包的本质就是作用域链的一个特殊的应用,只要了解了作用域链的创建过程,就能够理解闭包的实现原理。
优点:
1.变量长期驻扎在内存中
2.防止变量污染全局
// 现在你和同事开发同一个模块,然后你发现你们变量名大部分相同,为了管理变量,防止污染全局,可以闭包来解决这个问题
// 开发规范:init代表着入口、初始化的意思
let name = 'XYZ';
let init = (function () {
let name = 'LM';
function callName() {
console.log(name);
}
return function () {
callName();
}
}());
let initXie = (function () {
let name = '同事开发部分';
function callName() {
console.log(name);
}
return function () {
callName();
}
}());
init();
initXie();
输出结果:
LM
同事开发部分
缺点:
物极必反,函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题。解决方法是在退出函数之前,将不使用的局部变量全部删除