循环中的变量函数定义

Variable functions definitions inside a loop?

本文关键字:函数 定义 变量 循环      更新时间:2023-09-26

在循环中定义函数会影响性能吗?

var doSomething = function(element){
      $(element).whatever();
    };
return this.each(function(){
  doSomething(this);
})

return this.each(function(){
  var element = this,
      doSomething = function(){
        element.whatever();
      };

  doSomething(); 
  ...
})

在第二个版本中,函数被定义为3245322453245次,这取决于迭代的元素数量,对吧?

我强烈建议使用http://jsperf.com/来测试这样的问题。

我们所能给你的只是根据我们的个人经历做出的最好的猜测,这些经历会有很大的不同。

编辑:还有,Something正在做什么对回答这个问题也非常重要。

我自己以前也对自己做测试感到惊讶。

希望这能有所帮助。

从技术上讲,在两个版本中,定义函数的次数都在80亿次左右。对于大量的迭代,您应该通过这样定义它来获得一些性能优势。

var doSomething = function(index, element){
      $(element).whatever();
    };
return this.each(doSomething);

好吧,element的作用域以及doSomething的作用域正好在当前循环迭代中,所以如果一切都实现正确,即垃圾收集器得到了优化,它应该可以很好地处理它。当然,你最好使用第一个版本。