1.闭包是什么?

  • 闭包是指有权访问另一个函数作用于中的变量的函数.*
    其实闭包就是一个函数,它常用的方式是在一个函数内部创建另一个函数.

例如:

'use strict'
function a(){
    let data = 'hello world';
    // 函数b就是一个闭包
    function b(){
        return data
    }
    return b
}
let newFun = a();
console.log(newFun()) // 打印结果  hello world

其实闭包是一种保护私有变量的机制,在函数执行时形成私有的作用域,保护里面的私有变量不受外界干扰.
例如:

function a(){
    let data = 0;
    function b(){
        return data++
    }
    return b
}
let add = a();
console.log(add()) //0
console.log(add()) // 1
console.log(add()) // 2
console.log(add()) // 3
console.log('--------创建add2--------')
let add2 = a();
console.log(add2())  // 0 
console.log(add2()) // 1
console.log(add2()) // 2
console.log(add2()) // 3

当我们创建add 函数的时候实际上返回的是闭包函数 b,调用add()函数,返回的是 b函数 data++的值,但是当我们在次创建一个增加函数 add2,并调用add2 函数这时data的值依然是从0开始的.这是因为闭包会携带包含它的函数的作用域,同时闭包是一个函数,这样它每次执行变量都会独立存储在内存中这样data的值就会不一样.

但因为会携带包含它的函数的作用域,因此会比其他函数占用更多的内存.




夏末流星
152 声望2 粉丝

生命不仅要超越别人,更要超越自己。