2012-03-29 2 views
4

Является ли определение функций внутри цикла влияющим на производительность?Определения переменных функций внутри цикла?

Как

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

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

против

return this.each(function(){ 

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


    doSomething(); 
    ... 
}) 

В 2-й версии функция получает определенный как 324532453245 раз, в зависимости от того, сколько элементов итерируемая, верно?

+1

Право. Я бы использовал первую версию. – bfavaretto

ответ

1

Технически вы определяете определение функций 80 байлионов или около того в обеих версиях. Для больших объемов итераций вы должны получить некоторую выгоду от ее определения, например, this.

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

return this.each(doSomething); 
1

ну, область element и, следовательно, doSomething находится в пределах текущей итерации цикла, поэтому, если все реализовано правильно, то есть сборщик мусора оптимизирован, он должен обрабатывать его в порядке. Конечно, вам гораздо лучше использовать первую версию.

2

Я бы рекомендовал использовать http://jsperf.com/ для проверки таких вопросов.

Все, что мы сможем дать вам, - это наша лучшая образованная догадка, основанная на нашем личном опыте, который будет широко варьироваться.

РЕДАКТИРОВАТЬ: Также что-то делает что-то очень важное, отвечая на этот вопрос.

Я сам был удивлен, проверив себя.

Надеюсь, это поможет.

Смежные вопросы