JavaScript的闭包

1.闭包:指的是那些引用了另一个函数作用域中变量的函数,通常在嵌套函数中实现

代码:

function createComparisonFunction(propertyName){
       return function(obj1,obj2){
           let value1=obj1[propertyName];
           let value2=obj2[propertyName];

          if(value1<value2){
                return -1;
          }else if(value1>value2){
              return 1;
          }else{
              return 0;
          }
      }
}

2.在这个内部函数被返回并在其他地方被使用之后,它仍然引用这个变量,因为内部函数的作用域链包含了外部函数的作用域

3.作用域的创建和使用:

        在调用一个函数时,会为这个函数调用创建一个执行上下文,并创建一个作用域链。然后用arguments,和其他命名参数来初始化这个函数的活动变量。外部函数的活动对象是内部函数作用域上的第二个对象。这个作用域链一直向外串起所有包含函数的活动对象,直到全局执行上下文才终止

图示1:

 

图示2:

 

4.使用闭包的不好的点

 

       1.内存泄漏,因为闭包还是会引用包含函数的活动对象,所以该对象不会被内存回收。旧版本IE,把HTML元素保存在某个闭包的作用域中,就相当于宣布该元素不能被销毁

       2.this对象,函数调用时会创建两个特殊的变量:this/arguments,内部函数永远不可能访问外部函数的这两个变量。故在定义匿名函数之前,先把外部函数的this保存在变量that中,然后在定义闭包时,就可以让它访问that。argument要访问也是一样操作。

 

posted @ 2025-07-18 11:44  白头吟  阅读(6)  评论(0)    收藏  举报