#javascript
Допустим есть код: // вне всяких блоков и функций var a1 = 'Something'; a2 = 'Something'; 1) В чём будет разница между переменные a1 и a2? 2) Является ли вообще a2 переменной? 3) Где-нибудь можно использовать второй вариант?
Ответы
Ответ 1
В чём будет разница между переменные a1 и a2? В режиме strict вариант без var будет сломан: 'use strict'; var a1 = 'Something'; a2 = 'Something'; // Uncaught ReferenceError: a2 is not defined Является ли вообще a2 переменной? Разумеется, а чем же ещё? Где-нибудь можно использовать второй вариант? Это дело каждого, но смысла в этом немного. Гораздо лучше явно обозначать глобальный объект(ака window.a2 = 42;). Ещё лучше - не засорять глобальный scope совсем.Ответ 2
1) В старом стандарте можно было работать и без var, просто присвоив значение. С "use strict" уже нельзя. 2) Да, является: Присвоение значения необъявленной переменной подразумевает, что она будет создана как глобальная переменная (переменная становится свойством глобального объекта) после выполнения присваивания значения. Т. е. до присвоения её нет и будет ошибка при обращении до присвоения; а вот с var переменная инициализируется до выполнения текущего блока. 3) Можно. Но нужны ли описанные выше проблемы? Подробнее, много полезного: javascript.ru, MDN.Ответ 3
Это скорее не ответ, а комментарий к ответу выше. (Комментарии мне пока не доступны, пардон) 1.Если обратиться к объявленной переменной до присваивания ей значения, на выходе получите undefined, в случае с необъявленной - ReferenceError. Это происходит, потому что переменная а1 уже объявлена и существует, переменная а2 соответсвенно не объявлена и не существует. console.log(a1); console.log(a2); var a1 = 'Something'; a2 = 'Something'; Является. Можно, но смысла в этом никакого.Ответ 4
Переменная объявленная без var (или let или const) попадает в глобальный объект: (function(){ var a = 1; b = 2; })(); console.log(b); console.log(a);
Комментариев нет:
Отправить комментарий