• javascript 闭包暴露句柄和命名冲突的解决方案


    暴露 

    最近在琢磨前端Js开源项目的东西,然后就一直好奇他们是怎么句柄暴露出来的,特整理一下两种方法。

    1. 将对象悬挂到window下面。

    2. 不使用var进行变量声明。下面上代码:

      (function(win){
          var needExpose={
              test:"ok"
          };
          if(!win['needExpose']){
              win['needExpose'] =needExpose;
          }    
      })(window)
      var needExpose=window['needExpose'];
      console.log(needExpose.test);//ok
       
      //第二种
      (function(){
          needExpose={//不用var
              test:"ok"
          }; 
      })() //()是一个立即计算的方式
      console.log(needExpose.test);//ok
      

        这两种方案,第二种是不可用`use strict`来对项目中的代码进行约束的,而且如果命名冲突的话,就粗问题了。

    3. 第一种方案解决冲突的方法,可以这么搞。
      var needExpose=window['needExpose']={test:"prev"};
      (function(win){
           
          var needExpose={
              test:"ok",
              conflict:function(){
                  var re = needExpose;
                  needExpose =window['needExpose']= _needExpose;
                  return re;
              }
          };
       
          var _needExpose=win['needExpose'];
           
          win['needExpose'] =needExpose;
           
      })(window) 
      var needExpose=window['needExpose'];
      console.log(needExpose.test)//ok
      var newVar=needExpose.conflict();
      console.log(needExpose.test)//pre
      console.log(newVar.test) //ok
      

        缓存先前加载库的引用,然后在conflict函数中,转换回来,并返回当前库的引用。

    just do myself
  • 相关阅读:
    礼物的最大价值
    复杂链表的复制
    全排列(回溯法)
    删除排序数组中的重复项
    三角形最小路径和(经典dp)
    链表中倒数第k个节点
    造成segment fault,产生core dump的可能原因
    wmpnetwk.exe怎么禁启动
    GSM/GPRS/EDGE/WCDMA/HSDPA/HSUPA--辨析
    OSI七层参考模型每一层都有哪些协议
  • 原文地址:https://www.cnblogs.com/rookieCat/p/4745510.html
Copyright © 2020-2023  润新知