Цитата приведена не для того что бы холивар разводить. А только для подтверждения моих слов. Если эта информация неточна, дайте ссылочку на источник, где можно пробелы в знаниях заполнить. :)
Пол часа искал:
«Если присвоить значение переменной, не объявленной с помощью инструкции var, JavaScript неявно объявит эту переменную за вас. Однако переменные, объявленные таким образом, всегда создаются как глобальные, даже если они работают только в теле функции. Чтобы не создавать глобальную переменную (или не использовать существующую), когда достаточно локальной переменной для отдельной функции, всегда помещайте инструкцию var в тело функции. Лучше всего объявлять с ключевым словом var все переменные – и глобальные, и локальные.»
Дэвид Флэнаган. JavaScript. Подробное руководство. 5-е издание. стр. 69
Но по поводу ваших замечаний, я соглашусь не со всеми:
«Стандарт определяет только один тип переменных.,
Отсутствие спецификатора var при объявлении — свидетельствует об инициализации свойства глобального объекта.»
Во-первых, я не говорил про тип переменных, вы что то спутали, я говорил про способы объявления переменной. А как вы отличаете «Отсутствие спецификатора var при объявлении» от обращения к переменной объявленной в объемлющей функции?
«Почему ни слова о функции eval, конструкторе Function, инструкции with?» Потому что не было у меня такой цели. Почитайте пожалуйста заголовок топика. Более того, я бы с удовольствием прочитал вашу заметку об этом, написать свою пока не могу, не хватает времени.
«Не подумайте что я придираюсь, но читать стандарт перед написанием таких тем и знать о том что тема уже раскрыта (1, 2, 3, 4, 5, 6, 7) в других местах просто необходимо.»
Автор на которого вы ссылаетесь, мне незнаком. Изучу на досуге.
Вы не правы. Далеко не все люди на собеседованиях волнуются, а многие если и волнуются, не дадут вам ни единого шанса понять это. К тому же подобные задачи даются обычно не для того что бы просто получить ответ, а для того что бы проследить ход рассуждений испытуемого. Если собеседование проводит грамотный специалист, решение может быть положительным, даже если ответ на вопрос (вопросы) неверный, но ход рассуждения верен.
Вам правильно советуют, учитесь управлять эмоциями. Собеседование не самая страшная вещь в жизни, и надо уметь взвешенно принимать решения вместо того что бы отдаваться эмоциям с головой.
Утечки памяти это в первую очередь особенность реализации интерпретатора. То есть попросту говоря они зависят от того где используется ваш код. Я пока не готов подробно описать утечки, просто времени не хватает. :)
Я пока не эксперт, поясните подробнее. Под всплытием имеется ввиду объявление переменных в конце тела функции? Если так, то действительно стоит рассмотреть этот вопрос, но это уже особенности явного и неявного объявления переменных — это тема другого микро-топика.
Неплохой пост, но если уж заговорили про контекст, то и про лексическую область видимости функций было бы неплохо рассказать тут же.
Например что будет в таком примере и почему:
var y = 5;
var x = function(){
return y;
};
var z = function(t){
var y = 10;
return t();
}
z(x);
«Если присвоить значение переменной, не объявленной с помощью инструкции var, JavaScript неявно объявит эту переменную за вас. Однако переменные, объявленные таким образом, всегда создаются как глобальные, даже если они работают только в теле функции. Чтобы не создавать глобальную переменную (или не использовать существующую), когда достаточно локальной переменной для отдельной функции, всегда помещайте инструкцию var в тело функции. Лучше всего объявлять с ключевым словом var все переменные – и глобальные, и локальные.»
Дэвид Флэнаган. JavaScript. Подробное руководство. 5-е издание. стр. 69
Но по поводу ваших замечаний, я соглашусь не со всеми:
«Стандарт определяет только один тип переменных.,
Отсутствие спецификатора var при объявлении — свидетельствует об инициализации свойства глобального объекта.»
Во-первых, я не говорил про тип переменных, вы что то спутали, я говорил про способы объявления переменной. А как вы отличаете «Отсутствие спецификатора var при объявлении» от обращения к переменной объявленной в объемлющей функции?
«Почему ни слова о функции eval, конструкторе Function, инструкции with?» Потому что не было у меня такой цели. Почитайте пожалуйста заголовок топика. Более того, я бы с удовольствием прочитал вашу заметку об этом, написать свою пока не могу, не хватает времени.
«Не подумайте что я придираюсь, но читать стандарт перед написанием таких тем и знать о том что тема уже раскрыта (1, 2, 3, 4, 5, 6, 7) в других местах просто необходимо.»
Автор на которого вы ссылаетесь, мне незнаком. Изучу на досуге.
Например что будет в таком примере и почему: