@MrSusua

Как исправить ошибку Don't make functions within a loop?

Здравствуйте!

Как исправить ошибку Don't make functions within a loop. в 20 строке? И почему он ругается на слово jQuery в последней?

(function($, window, document, undefined) {
	'use strict';

	var s = document.body || document.documentElement;
		s = s.style;
	if (s.webkitFlexWrap === '' || s.msFlexWrap === '' || s.flexWrap === '') return true;

	var $list = $('.list'),
		$items = $list.find('.list__item'),
		setHeights = function() {
			$items.css('height', 'auto');

			var perRow = Math.floor($list.width() / $items.width());
			if (perRow === null || perRow < 2) return true;

			for (var i = 0, j = $items.length; i < j; i += perRow) {
				var maxHeight = 0,
					$row = $items.slice(i, i + perRow);

				$row.each(function() {
					var itemHeight = parseInt($(this).outerHeight());
					if (itemHeight > maxHeight) maxHeight = itemHeight;
				});
				$row.css('height', maxHeight);
			}
		};

	setHeights();
	$(window).on('resize', setHeights);
	$list.find('img').on('load', setHeights);

})(jQuery, window, document);
  • Вопрос задан
  • 503 просмотра
Пригласить эксперта
Ответы на вопрос 2
petermzg
@petermzg
Самый лучший программист
Вы декларируете функцию внутри цикла for.
Для решения нужно просто вынести ее из цикла. Примерно так
var maxHeight = 0;
var fn = function() {
    var itemHeight = parseInt($(this).outerHeight());
    if (itemHeight > maxHeight) maxHeight = itemHeight;
};
for (var i = 0, j = $items.length; i < j; i += perRow){
  maxHeight = 0;
  var $row = $items.slice(i, i + perRow);
  $row.each(fn);
  $row.css('height', maxHeight);
}
Ответ написан
@timfcsm
в самой ошибке ответ на вопрос, как её исправить.. вынесите объявление функции за цикл. это jshint? в конфиге добавьте в globals 'jQuery'
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы