循环内部的变量函数定义?

4

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

比如:

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

return this.each(function(){
  doSomething(this);
})

vs

return this.each(function(){

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


  doSomething(); 
  ...
})

在第二个版本中,该函数会被定义324532453245次,这取决于需要迭代的元素数量,对吗?

1
好的,我会使用第一个版本。 - bfavaretto
3个回答

2
我强烈推荐使用http://jsperf.com/来测试这样的问题。
我们能给你的只是基于个人经验的最佳猜测,这会有很大差异。
另外,doSomething函数的作用对回答这个问题也非常重要。
我自己以前也曾因为自己的测试而感到惊讶。
希望这可以帮到你。

1

嗯,element的作用域以及doSomething的作用域仅限于当前循环迭代,因此如果一切实现正确,即垃圾收集器被优化,它应该可以处理得很好。当然,最好使用第一个版本。


1

从技术上讲,你在两个版本中都定义了80亿次函数定义。对于大量迭代,你应该从像this这样的定义中获得一些性能优势。

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

return this.each(doSomething);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接