Посмотрите на следующий код:
Кода -копия выглядит следующим образом:
if (! ("aa" в окне)) {
Блюдо («Боже мой»);
var aa = 1;
}
оповещение ("AA" в окне);
блюд (AA);
Ответьте на следующие вопросы:
Сообщается о ошибке? Сколько раз это появится?
Второе предупреждение верно или ложное?
Что появляется в третьем предупреждении?
Почему?
Подумайте об этом, а затем протестируйте это. Если вы ответите правильно, вам не нужно читать следующие статьи.
-----------------------------
Определение переменных в JS слишком просто. Вы можете просто использовать VAR или даже без VAR:
Кода -копия выглядит следующим образом:
var a = 1;
Здесь a - это имя переменной, а 1 - значение переменной. Увы, это слишком просто. Посмотрите на следующий код:
Кода -копия выглядит следующим образом:
var a;
предупреждение (а);
В тесте Firebug появится неопределенная. Это очень знакомая строка, которая, по -видимому, указывает на то, что переменная не определен. Но я думаю, что я уже менял это, это определение, но нет никакой ценности.
Давайте сделаем что -то действительно неопределенное:
Кода -копия выглядит следующим образом:
предупреждение (а);
Правильно, просто предупреждайте переменную, которая никогда не появилась вообще. Что будет?
Firebug напрямую сообщила об ошибке: A не определяется. Это означает, что A не определено. Сочетая предыдущий код, это сбивает с толку. В чем разница между этим неопределенным и предыдущим неопределенным?
Фактически, предыдущий код эквивалентен этим:
Кода -копия выглядит следующим образом:
var a = не определен;
предупреждение (а);
Другими словами, когда переменная объявляется без присвоения значения, JS передаст неопределенное значение переменной. Обратите внимание, что это «значение», что означает, что A уже имеет значение, и это значение называется «неопределенным».
Переменные, лежащие в основе прямого оповещения, никогда не появлялись, что означает, что это реальное неопределенное.
Проще говоря: нет никакой переменной без значения в JS, и значение присваивается при объявленной переменной.
Затем мы смотрим на следующий код:
Кода -копия выглядит следующим образом:
предупреждение (а);
var a = 1;
Будет ли этот код сообщать об ошибке? Потому что, когда оповещение настороженно, переменная A еще не появилась.
Но нет ошибки таким образом, но появляется неопределенное значение. Это указывает на то, что переменная уже существует, но значение не то, что мы хотим, но не определяется. В чем проблема?
Поскольку объявление переменной var совпадает с объявлением функции, оно будет продвинуто, на самом деле, приведенный выше код выглядит следующим образом:
Кода -копия выглядит следующим образом:
var a;
предупреждение (а);
a = 1;
Таким образом, вы поймете.
Следовательно, ключ к этой проблеме: объявление VAR будет достигнут вершины сферы прицела, но прикрепленное значение не будет - очень запутанной настройкой, я не знаю, почему я это сделал. Я лично думаю, что это недостаток JS.
Теперь существует привычка кода, когда защитники выставляют переменные объявления перед области, вероятно, рассматривая это - даже если вы не напишите их впереди, JS пойдет заранее.
Теперь позвольте мне выпустить ответ на вопрос в начале статьи:
Пойдут только два оповещения, и предупреждение, если не будет выполнено, поскольку объявление VAR продвигается, реальный код выглядит следующим образом:
Кода -копия выглядит следующим образом:
var aa;
if (! ("aa" в окне)) {
Блюдо («Боже мой»);
aa = 1;
}
оповещение ("AA" в окне);
блюд (AA);
Хотя АА пуст, это будет правдой, когда будет судить «АА» в окне, потому что А существует и значение не определен. Так что, если код не будет выполняться. Я не буду говорить о двух последних оповещениях.
Лично я чувствую, что это очень бессмысленный вопрос. Мы должны понимать его причины, но презирать его как ловушку.
Приведенный выше вопрос также является причиной, по которой я написал эту статью. Я видел этот код из онлайн -статьи, но в нем нет ответа. Я не мог победить свою сестру, поэтому я пошел в Stackoverflow и попросил узнать. Ответ - эта статья.
Но это очень простой вопрос, на самом деле! ! !
Ха -ха, прости меня, есть еще один вопрос:
Кода -копия выглядит следующим образом:
var b = {}
бдительность (B.AA);
предупреждение (B.AA.BB);
Это также способ объявить переменные. Итак, будет ли этот код сообщать об ошибке? Почему?