什么是闭包,闭包的使用场景?

简单总结

闭包(closure):函数嵌套函数,内部的函数就是闭包,正常情况下,函数执行完成,内部变量会销毁(销毁:释放内存空间),内部函数没有执行完成,外部函数变量不会被销毁

function outerFun() {
  let a = 20;
  function innerFun() {
    console.log(a); //可以访问外部函数的变量,作用域链的概念
  }
  return innerFun;
}
let fun = outerFun(); 
fun()

使用场景:闭包可以封装一段代码

传统不使用闭包,过多的全局变量

let a = 10, b = 20;
function add() {
  return a + b;
}
function sub() {
  return a - b;
}
let result1 = add();
let result2 = sub();
console.log(result1);//30 
console.log(result2); //-10

使用闭包,创建个独立的私有变量(模块化)

let JC = (function () {
  let a = 10, b = 20;
  function add() {
    return a + b;
  }
  function sub() {
    return a - b;
  }
  return {
    add,
    sub
  }
})()

let result1 = JC.add();
let result2 = JC.sub();
console.log(result1);//30 
console.log(result2); //-10

全面总结

闭包(closure):

1、闭包指的是函数内部的函数,它有权取访问另一个函数的内部的变量,即使这个内部的函数被返回了,或者被调用了,他的访问权限仍然存在。

2、可以利用闭包模拟私有属性,实现数据隐藏和封装,比如防抖和节流函数封装使用了闭包,但要避免滥用闭包导致内存泄漏

扩展:什么是防抖和节流?有什么区别?如何实现及使用场景?

你可能感兴趣的:(前端,javascript,前端)