Javascript 在全局闭包中存储对DOM对象的引用是否效率很低?

Javascript 在全局闭包中存储对DOM对象的引用是否效率很低?,javascript,jquery,Javascript,Jquery,假设我有一个给定的全球生命终结 var foo = function(){ var x; function doStuffToX(){ ... } return { doStuff: doStuffToX } }(); 其中x是对DOM元素的引用 考虑到这些DOM引用中有30多个,并且很少调用foo.doStuff(),下面哪种方法更有效?请注意,这将是一个单页应用程序,因此不会清除内存 在foo.x 在doStuff()s闭包中查询#x 在调用函数

假设我有一个给定的全球生命终结

var foo = function(){
   var x;

   function doStuffToX(){
      ...
   }

   return { doStuff: doStuffToX }
}();
其中x是对DOM元素的引用

考虑到这些DOM引用中有30多个,并且很少调用
foo.doStuff()
,下面哪种方法更有效?请注意,这将是一个单页应用程序,因此不会清除内存

  • foo.x
  • doStuff()
    s闭包中查询
    #x

  • 在调用函数的情况下,1的速度效率更高,2的内存效率更高。与其过于担心这些微优化,只需编写代码,然后如果发现性能问题,就开始对代码进行剖析,看看需要改进的地方。在性能和内存使用方面,要考虑的另一个问题是出错的风险。如果您在执行代码之前启动选择器,您将面临使用过时引用的风险-即,您选择一个元素,然后修改包含该元素的html,这实际上会创建一个具有相同属性的全新元素,但您的旧引用现在链接到不存在的元素,而不再是页面上的内容。缓存选择器时要小心,这并不总是值得的。
    $(function(){
       foo.init();
       foo.doStuff();
    });
    
    var foo = function(){
       var x;
    
       function init(){
          x = $('#x');
       }
    
       function doStuffToX(){
          ...
          x.modifyDom();
          ...
       }
    
       return { init: init, doStuff: doStuffToX }
    }();
    
    $(function(){
       foo.doStuff();
    });
    
    var foo = function(){
    
       function doStuffToX(){
          ...
          var x = $('#x');
          x.modifyDom();
          ...
       }
    
       return { doStuff: doStuffToX }
    }();