立即执行功能性能

时间:2013-01-18 09:52:59

标签: javascript performance self-invoking-function

我正在测试两对场景:

1。)将全局变量作为参数传递......

(function(d){
   //do some stuff with d
   return //something
})(document);

...或将全局分配给局部变量。

(function(){
   var d = document;
   //do the same stuff
   return //something
})();

从浏览器到浏览器,从版本到版本,甚至从测试到测试,结果都不同!

2。)我有一个通过XMLHttpRequest获得的大型数据对象。假设这个对象可以通过几种方法访问,但只有一种方法与父函数的范围相关。

(function(){
   //get data object
   var data = response;
   //change GUI, assign events, do some other stuff
   var searchInData = function(id){ //this will be used often
      //code
   };
   //data object won't be accessed any more
   //a lot of code
   return //something
})();

......还是要用这个?

(function(){
   var search = (function(){
      var data = response;
      //change GUI, assign events, do some other stuff
      return function(id){
         //code
      }
   })();
   //other stuff
   return //something
})();

同样,我无法得到明确的结果:使用哪种,为什么以及何时使用?

1 个答案:

答案 0 :(得分:2)

  

1从浏览器到浏览器,从版本到版本,甚至从测试到测试,结果都不同!

然后使用你发现的更好阅读。例如,选项#1的编写量较少,但是对于长函数而言,没有难以理解的描述性参数(您需要向下滚动以了解变量包含的内容)。

  

2使用关闭?

我认为//a lot of code是相关的。这两个函数都可以访问该代码范围内的变量,如果不使用闭包,那么很多代码都有局部变量(选项#2)。如果您使用闭包,浏览器可能能够优化垃圾收集并进行更好的内存管理。但是,这将取决于//other stuff实际上是什么 - 对于我建议关闭的异步代码。