2012-03-29 119 views
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 2012-03-29 16:26:16

回答

1

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

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

return this.each(doSomething); 
1

精良,element因而doSomething范围仅仅是本次循环中,所以如果一切是正确实施,即垃圾收集器进行了优化,它应该罚款处理。当然,使用第一个版本会更好。

2

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

根据我们个人经验的不同,我们所能给予您的是我们最好的教育猜测。

编辑:另外什么是做什么在回答这个问题以及非常重要。

我自己一直在测试自己以前感到惊讶。

希望这会有所帮助。