Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 立即执行的功能性能_Javascript_Performance_Self Invoking Function - Fatal编程技术网

Javascript 立即执行的功能性能

Javascript 立即执行的功能性能,javascript,performance,self-invoking-function,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.)我有一个通过XMLHttpRe

我在测试两对场景:

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不同浏览器、不同版本、甚至不同测试的结果都不同

然后用你觉得更适合阅读的东西。例如,选项#1不太好写,但是没有描述性参数,很难理解长函数(需要向下滚动才能知道变量包含什么)

2使用闭包


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

使用最简单且读起来最清晰的代码。编写同一段代码的方法有无数种。虽然差异可能很小,但测试的最佳位置是//大量代码或//其他东西=更多ajax调用、更多计算等等,并且不访问数据对象,只需使用搜索功能即可//更改GUI、分配事件、执行其他操作从该范围访问单个变量-文档对象…但是
search
使用
data
对象。我不知道你的代码到底是什么,但是试着让以后不需要的变量(如果你有)可以被垃圾回收。特别是把它们放在GUI事件处理程序的范围之外,这就是问题所在。我有一个具有非常特定层次结构的巨大数据对象,我的工作是以breadcrumb=创建和删除元素、事件和处理程序的形式显示数据。。。这就是为什么我要考虑它——将数据对象、DOM对象、特定变量和事件处理程序放在一个单独的块中。搜索稍后用于其他原因,但必须具有对数据对象的访问权限。数据对象在整个会话期间不会更改。因此您几乎不需要对其进行闭包-尤其是当您已经有引用数据的
响应
变量时。我没有。XHR对象将在那里创建。。。