闭包

发布时间 2023-06-12 18:19:11作者: 有只小菜猫

1、定义

指能够访问另一个函数作用域中的变量的一个函数(定义在一个函数内部的函数)

2、作用

(1)防止全局污染

(2)利用其可突破作用域链,将函数内部的变量和方法传递到外部,让外部函数可以访 问到内部函数的变量和方法

3、优点

(1)形成闭包的函数在执行之后,不会被回收,依旧存在内存中

(2)私有变量化,适合模块化开发

4、缺点

变量不会回收,耗费内存,容易造成内存泄漏

【内存泄漏:浏览器无法回收代码的内存,比如说一个对象或者一个数组】

5、应用场景:(防抖和节流)

for (var i = 0; i < 3; i++) {
  setTimeout(function log() {
    console.log(i); // => ?
  }, 1000);
}
for (let i = 0; i < 3; i++) {
  setTimeout(function log() {
    console.log(i); // => ?
  }, 1000);
}
function fun() {
    var arr = []
    // for循环中,每次都是往空数组中放入一个匿名函数
    // [function(){},function(){},function(){}]
    for (var i = 0; i < 3; i++) {
        arr[i] = function () {
        console.log(i)
    }
}
// 循环结束后i为3
// i=3
return arr 
//[function(){},function(){},function(){}]
}
var newArr = fun()
newArr[0]()
newArr[1]()   
newArr[2]()