• 闭包


     function createComparisionFunction(propertyName){
               return function(obj1,obj2){
                   var val1=obj1[propertyName];
                   var val2=obj2[propertyName];
    
                   if(val1<val2){
                       return -1;
                   }else if(val1>val2){
                        return 1;
                   }else{
                       return 0;
                   }
               }
           }
           var object1={name:"aaa",age:"12"};
           var object2={name:"bbb",age:"22"};
           var func=createComparisionFunction("name");
           var res=func(object1,object2);    //-1

    标注红色的两行代码是内部代码中的代码,这两行代码访问了外部函数中的变量 propertyName。即使这个内部函数被返回了,在其他地方调用,仍能够访问变量propertyName。之所以还能够访问这个变量,是因为内部函数的作用域链中包含createComparisionFunction()的作用域。

    在匿名函数从createComparisionFunction()中被返回后,它的作用域链被初始化为包含createComparisionFunction()函数的活动对象和全局变量对象。这样,匿名函数就可以访问在函数createComparisionFunction()中定义的所有变量。更重要的是,createComparisionFunction()函数在执行完毕后,其活动对象不会被销毁,因为匿名函数的作用域链仍然在引用这个活动对象。换句话说,当createComparisionFunction()函数返回后,其执行环境的作用域链会被销毁,但它的活动对象仍然会留在内存中;直到匿名函数被销毁后,createComparisionFunction()活动对象才会被销毁。

  • 相关阅读:
    【转载】Linux 内核启动时间分析
    hackbench
    c用户组函数
    c环境变量操作函数
    c网络接口套接字函数
    c信号处理函数
    c进程操作函数
    c文件内容操作函数
    c文件操作
    c数据结构和算法
  • 原文地址:https://www.cnblogs.com/jcbo/p/6761717.html
Copyright © 2020-2023  润新知