首先在最开始,我要先声明一下闭包的功能:1.在函数外访问函数内部
2.保持引用,不被垃圾回收
简单点来说就是封装、复用、不被污染
下面来简单介绍一下闭包
1.闭包是什么意思那?一个函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起(或者说函数被引用包围),这样的组合就是闭包(closure)。这是在MDN中对闭包的官方定义,其实简单地说闭包就是内层函数来访问外层函数的一个方法。
function fn1() {
var a=1;
console.log(a);//1
console.log(b);//报错
return{
function fn2() {
var b=2;
console.log(b);//2
console.log(a);//1
}
}
}
fn1();
fn1().fn2();
这个时候fn2函数就叫做闭包,换句话说闭包就是能够读取其他函数内部变量的函数。
2.为什么要创建闭包哪?这就要说到JavaScript中函数的作用域问题了。分为全局作用域还有局部作用域,我们都知道局部作用域可以获得全局作用域中的变量,但是全局作用域如何获取局部作用域,这时候就要用到闭包了。
3.但是我们在使用闭包的时候要注意,如果不是必要的情况下,其实用闭包是非常不明智的,其实就是建议不要再函数内部嵌套函数,因为他会耗费内存也会影响脚本的处理速度。
4.闭包的好处:它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中,不会在 fn1 调用后被自动清除。