【笔记】【Javascript】闭包

前言

  • 闭包是每一个前端开发必须掌握的内容。
  • 笔记中有些个人理解后整理的笔记,可能有所偏差,也恳请读者帮忙指出,谢谢。

免责声明

  • 为了方便,本文中使用的部分图片来自于网络,如有侵权,请联系博主进行删除,感谢其他博主提供的图床。
  • 此笔记用于记录本人对于该知识的汇总。以方便日后的工作与学习。
  • 如有侵权请告知,马上删除。

【是什么?】

  • 闭包就是能够读取其他函数内部变量函数。(即定义在一个函数内部的函数

    • 变量:

      • 全局变量:函数内部可以直接读取
      • 局部变量:函数内部的变量,函数外部无法读取
    • 链式作用域:子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。

【为什么要用闭包?】

【作用】

  • 获取到函数内部的局部变量。
  • 让这些变量的值始终保持在内存中,不会在外部函数调用后被自动清除。

【缺点】

  • 导致内存泄露
    • 由于使用闭包后的变量会一直保存在内存中,导致内存消耗很大。
    • 【解决办法】在退出函数之前,将不使用的局部变量全部删除。
  • 闭包会在父函数外部,改变父函数内部变量的值。
    • 【解决办法】把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value)

【怎么生成闭包?】

【示例】1. 获取到函数内部的局部变量(f2函数获取到f1函数的变量)

function f1(){
    
    
    var n=999;
    function f2(){
    
    
        alert(n); // 999
    }
}

【示例】2. 让变量不会在外部函数调用后被自动清除

var add = (function () {
    
    
    var counter = 0;
    return function () {
    
    return counter += 1;}
})();

add();
add();
add();

【好文推荐】

[1] 什么是闭包?闭包的优缺点?

[2] JavaScript 闭包·[菜鸟编程]

猜你喜欢

转载自blog.csdn.net/weixin_45944495/article/details/130717425
今日推荐