Определения переменных функций внутри цикла? - PullRequest
4 голосов
/ 29 марта 2012

Влияет ли определение функций внутри цикла на производительность?

Как

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 раз, в зависимости от того, сколько элементов повторяется, верно?

Ответы [ 3 ]

2 голосов
/ 29 марта 2012

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

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

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

Я сам раньше был удивлен проведением испытаний самостоятельно.

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

1 голос
/ 29 марта 2012

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

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

return this.each(doSomething);
1 голос
/ 29 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...