разница между циклами for..in и for и объявлением счетчика - PullRequest
0 голосов
/ 31 октября 2011

разница (скорость, производительность, побочные эффекты, ...) между реализациями цикла for:

между

var i;
for(i = 0; i < length; i++){ //Do something}
// more code

и

for(var i = 0; i < length; i++){ //Do something}
// more code

и

for(i = 0; i < length; i++){ //Do something}
// more code

и между

var e;
for( e in array){ //Do something}
// more code

и

for(var e in array){ //Do something}
// more code

и

for(e in array){ //Do something}
// more code

Ответы [ 3 ]

2 голосов
/ 31 октября 2011

Нет разницы в отношении десятичной переменной вашего счетчика.

НО ВСЕГДА ОБЪЯВЛЯЙТЕ ВАШИ ПЕРЕМЕННЫЕ С var

В противном случае они загрязняют и без того грязную глобальную область видимости JavaScript ...

Насколько for...in против традиционных for смотрите здесь ...

( Какой мой ответ на дублирующий вопрос ... )

2 голосов
/ 31 октября 2011

Разницы нет.

Переменные JavaScript имеют только область действия функции, и хотя вы можете поместить оператор var в часть инициализации цикла for, в действительности это объявление " hoisted " в верхней части области действия так что при запуске примеров второго случая они обрабатываются точно так же, как и в первом случае.

РЕДАКТИРОВАТЬ: Поскольку вы обновили вопрос после того, как я ответил, третий добавленный вами синтаксис, в котором вы не используете ключевое слово var, означает переменную i ( или e) будет создан как глобальный - если только он не существует как глобальный, в этом случае существующая переменная будет перезаписана. Доступ к глобальной переменной медленнее, чем доступ к локальной переменной.

ПРИМЕЧАНИЕ: моя интерпретация вопроса заключается в том, что он не сравнивает стандарт цикла for с вариантом for..in, он просто сравнивает различные методы объявления переменных друг с другом для стандарта цикла for, а затем делает то же самое. снова для цикла for..in.

0 голосов
/ 27 сентября 2014

Да, есть разница между циклом for и циклом for / in в JavaScript.Вот что отличается

Рассмотрим этот массив

var myArr = ["a", "b", "c"];

Позже я добавлю элемент в этот массив, но по-другому, например так:

myArr[myArr.length + 1] = "d";

На данный момент, это то, как выглядит массив, если вы console.log его

["c", "b", "a", undefined × 1, "d"]

Теперь давайте пройдемся по циклу, используя цикл for и for / in, и посмотрим, в чем разницаis: first, давайте попробуем цикл for

for(var i = 0; i != myArr.length; i++) {     // note, i used " != " instead of " < ". Yes this is faster.
  console.log(myArr[i]);
}
// output will look like this:
// "a" 
// "b" 
// "c"
// undefined × 1
// "d" 
// - This still shows the undefined value in the array.

Теперь давайте посмотрим на цикл for / in

for(key in myArr) {
  console.log(myArr[key]);
}
// array will look like:
// "a"
// "b"
// "c"
// "d"
// This will skip the undefined value.

Разница 1 : интерпретатор javascript будетпропустить все значения, которые являются нулевыми или неопределенными при использовании цикла for / in.Кроме того, цикл for / in преобразует все значения, если он встречает примитивное значение, в эквивалентный объект-оболочку.Где, поскольку цикл for этого не делает.

Разница 2 : При использовании цикла for мы объявили переменную i внутри цикла, эта переменная будет ограничена в функции,если цикл написан внутри этой функции.Это означает, что до завершения функции переменная i все еще доступна, даже вне цикла for, но внутри этой функции.Если, как в случае цикла for / in, область действия переменной «key» прекращается сразу после того, как цикл for / in перестает выполняться, что означает меньшее использование памяти.

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