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要访问也是一样操作。
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号