-1

我正在测试两对场景:

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
})();

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

4

1 回答 1

2

1 结果因浏览器而异,因版本而异,甚至因测试而异!

然后使用您认为更好的阅读方式。例如,选项 #1 编写起来会更少,但没有描述性参数,对于长函数来说很难理解(您需要向下滚动才能知道变量包含的内容)。

2 使用闭包?

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

于 2013-01-18T10:03:53.457 回答