闭包是什么,有什么特性?有什么负面影响?

  • 回顾:作用域和自由变量
  • 闭包应用场景:函数作为参数被传入,函数作为返回值被返回
  • 回顾:自由变量的查找,要在函数定义的地方(而非执行的地方)
  • 影响:变量会常驻内存,得不到释放。闭包不要乱用
// 自由变量示例 - 内存会被释放  
let a = 0  
  
function fn1() {  
    let a1 = 100  
  
    function fn2() {  
        let a2 = 200  
  
        function fn3() {  
            let a3 = 300  
            return a + a1 + a3 + a3  
        }  
    }  
  
    fn2()  
}  
  
fn1()  
  
// 闭包 函数作为返回值 - 内存不会被释放  
function create() {  
    let b = 100 // b 被返回,暂时不会释放  
    return function () {  
        console.log(b)  
    }  
}  
  
let fn2 = create()  
let b = 200  
fn2() // 100  
  
// 闭包 函数作为参数 - 内存不会被释放  
function print(fn){  
    let c = 200  
    fn()  
}  
  
let c =100 // b 被传入,暂时不会释放  
function fn3(){  
    console.log(c)  
}  
print(fn3) // 100

标签: 无

评论已关闭