【JS面试题】什么是闭包?闭包会用在哪里?

什么是闭包?闭包会用在哪里?

闭包:
作用域应用的特殊情况,有两种表现:

  1. 函数作为参数被传递(函数在一个地方定义好后,传递到另一个地方去执行)
  2. 函数作为返回值被返回(函数在一个地方定义好之后,它会被返回到这个地方)

总之,函数定义的地方和函数执行的地方是不一样的

在这里插入图片描述
核心代码演示:

//函数作为返回值
function create () {
    const a = 100
    return function() {
        console.log(a)
    }
}

const fn = create();
const a = 200;
fn(); //100

fn();函数执行,在全局作用域;
a=200;也是全局作用域;
create() 里面返回函数
a=100 在create()里面;
返回函数时,a是自由变量,向上级寻找,所以a=100

//函数作为参数被传递
function print(fn) {
    const a = 200
    fn()
}
const a = 100
function fn() {
    console.log(a)
}
print(fn) //100

print(fn),执行fn()时,fn()中a为自由变量,向上级寻找,找到a=100

总结:

闭包:所有自由变量的查找,是在函数定义的地方,向上级作用域查找
不是在执行的地方!!

猜你喜欢

转载自blog.csdn.net/weixin_43352901/article/details/107528020