Я строю, чтобы писать в лучшей практике. так как я знал, что "in-in" - плохая практика из-за этого плохого поведения, я прекратил его использовать. но как насчет использования for-of?? и какое слово мы должны использовать перед итератором (var, let, const) и почему?
for (const iterator of cells) { iterator.addEventListener('click', function (event) { console.log(iterator); }); }
for-of
- это, в частности, для прокрутки значений итерируемого объекта, такого как массив. Так что да, абсолютно, использование for-of
на массиве - отличная практика.
и какое слово мы должны использовать перед итератором (var, let, const) и почему
Это вам. (Но это не "итератор". Это "переменный" или "привязывающий" или "свободно" идентификатор. Итератор - это объект, используемый под обложками for-of
.) Я использую const
если не планирую изменить значение привязки в цикле (и обычно это лучше не делать), поскольку оно является константой для каждой итерации цикла. let
также является разумным выбором, и в обоих случаях любые замыкания, созданные в цикле, не будут преследовать проблему замыкания в цикле с этой привязкой. Но по той же причине, как let
и const
могут иметь импликацию производительности, если она объявлена в конструкции цикла, поскольку для каждой итерации цикла создается новое связывание. Если вы использовали var
, у него была бы область функций и, следовательно, не была бы воссоздана для каждой итерации цикла. (Но я бы не использовал var
, если у меня есть особенно чувствительный к производительности бит кода, где мне нужно избегать привязки к рекреации, я использую let
выше цикла вместо этого.)
... с тех пор, как я знал, что "вне игры" - плохая практика из-за плохого поведения...
for-in
не является "плохим поведением", если используется для его цели: Зацикливание через имена перечислимых свойств объекта. Это просто люди часто используют его для перебора индексов массива, для которых он не предназначен и не подходит для него. (Больше ответов на этот вопрос, в том числе и мой.)