zoukankan      html  css  js  c++  java
  • 闭包

     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()活动对象才会被销毁。

  • 相关阅读:
    Maven项目多环境之间的配置文件的切换
    使用vue脚手架快速创建vue项目(入门)
    SpringAOP之使用切入点创建通知
    epoll的陷阱
    epoll-1
    openSUSE Leap 15格式化挂载新分区
    openSUSE Leap 15取消自动登录
    openSUSE Leap 15通过windows rdp访问
    openSUSE Leap 15安装打开ssh
    数组、函数与指针
  • 原文地址:https://www.cnblogs.com/jcbo/p/6761717.html
Copyright © 2011-2022 走看看