zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    美团面试准备
    SSM实战项目——Java高并发秒杀API
    接口和抽象类有什么区别
    Java中static、final、static final的区别
    多线程面试题
    idea新建maven项目没有src目录
    聊聊MyBatis缓存机制
    Java 8系列之重新认识HashMap
    数据库SQL实战练习
    牛客网刷题(一)
  • 原文地址:https://www.cnblogs.com/rookieCat/p/4745510.html
Copyright © 2011-2022 走看看