Синтаксис for…in

277
28 мая 2017, 22:07

Читал учебник в интернете на одном ресурсе и заметил что:

for (item in items) не отличается от for (var item in items)

Код работает в обоих случаях без ошибок, так в чем соль? Есть ли разница в этих синтаксисах если да, то скажите в чем?

Answer 1

Любое присвоение не объявленной ранее переменной (не в strict) создает эту переменную как глобальную.

function WithVar(items) { 
  var prostoPermennaja1 = 123; 
  for (var item1 in items) { 
    //console.log(item1); 
  } 
} 
 
function WithoutVar(items) { 
  prostoPermennaja2 = 123; 
  for (item2 in items) { 
    //console.log(item2); 
  } 
} 
 
var items = {a:1, b:2}; 
 
WithVar(items); 
console.log(window.item1); 
console.log(window.prostoPermennaja1); 
 
WithoutVar(items); 
console.log(window.item2); 
console.log(window.prostoPermennaja2);

И ограничения с use strict, как указал @AliaksandrPitkevich.

Answer 2

не объявлять переменную, где бы она не была - это ошибка, если опираться на новый стандарт при поддержке 'use strict'. Сейчас во всех нормальных компаниях так пишут код. Итого если использовать не объявленную через var переменную в "строгом режиме", то будет ошибка, т.е. при попытке выполнить код без 'use strict':

let obj = { 
'qwe': 1, 
'asd': 2 
} 
for (i in obj) { 
  console.log(obj[i]); 
}

ошибки не будет, тоже самое при работе 'use strict':

'use strict' 
let obj = { 
'qwe': 1, 
'asd': 2 
} 
for (i in obj) { 
  console.log(obj[i]); 
}

Вывод, всегда объявляем переменные и не паримся)

READ ALSO
Почему не отрабатывает кнопка купить на главной странице магазина?

Почему не отрабатывает кнопка купить на главной странице магазина?

Есть демо интернет-магазин на wordpress+woocommerce (на хостинге поддержка php 56) и его полная итоговая копия

281
не правильно работает поиск

не правильно работает поиск

поиск перестает нормально работать(может только находит последний елемент) когда я добавляю команду overlaystyle

244