JS中的闭包问题总结

  • 严格意义上的闭包,严格闭包通过栈内存不销毁,保护内部变量,而且下一级作用域可以访问内部变量
  • 更严格意义上的闭包,函数可以在父函数外面调用父函数作用域的值
  • 在函数执行的时候,函数体中有返回值,函数执行的作用域不销毁
  • 调用了上一级栈内存的变量,并返回给函数外,造成了上一级作用域不销毁(栈内存)
  • 缺点
    • 会造成很多不销毁的栈内存,影响浏览器的性能
  • 优点
    • 保护内部变量不被外界所污染,内部变量也不污染外部变量
    • 可以通过返回值访问内部变量的值
  • 销毁的作用域
    • 当函数执行完,如果没有返回值,供外面作用域调用则直接销毁
    • 在函数内部的自执行函数,虽然调用了上级作用域的值,但是函数执行完作用域依然销毁
    • 在我们的函数执行的返回值,紧跟着当前函数直接执行的时候,作用域也会销毁
    • 产生第三方对函数内部变量有承接,赋值的时候,当前作用域不销毁,这种销毁时暂时不销毁
    • 在绑定事件中的函数,函数的栈内存是永远不销毁的
    • 函数和DOM形成映射,是操作DOM的时候方法,这时候的函数作用域是不销毁的
原文地址:https://www.cnblogs.com/Scar007/p/7640643.html