Создание совместимого HTML подобно обеспечению, чтобы у Вас не было предупреждений во время компиляции - предупреждения там по причине, Вы не можете понять, какова та причина, но проигнорируйте предупреждения и перед знанием, где Вы, там как так многие, Вы не можете определить тот, который это относится к проблеме, которую Вы пытаетесь решить.
при использовании Firefox для просмотра веб-страниц, Вы получите полезную зеленую галочку или Красный Крест в правом нижнем угле, быстро показывая Вам, соответствовали ли Вы или нет. Нажатие на Красный Крест покажет Вам все места, где Вы попали впросак. Некоторые предупреждения/ошибки могут казаться немного педантичными, но зафиксировать их, и Вы извлечете выгоду во многих отношениях.
Отказ сделать это приводит к непредсказуемости.
Одна из самых больших проблем с веб-браузерами - то, что они увековечили дурные привычки (И все еще сделайте, в некоторых случаях) путем тихого исправления определенных проблем разметки, таких как отказ закрыть ячейки таблицы и/или строки. Этот единственный факт привел к тысячам веб-страниц, которые не совместимы, но 'работают', убаюкивая их разработчиков в ложное чувство безопасности.
, Когда Вы рассматриваете, сколько там вещи, это может пойти не так, как надо с веб-сайтом, быть ленивым когда дело доходит до соответствия просто добавляет больше проблем к Вашей рабочей нагрузке.
РЕДАКТИРОВАНИЕ: читая Ваше исходное сообщение снова, я замечаю, что Вы говорите, что не беспокоитесь соответствием при работе над прототипом, тогда Вы продолжаете, что Вы обычно используете прототип в производстве - это означает, что это не строго прототип, но кандидат. Нормальная ситуация при таких обстоятельствах состоит в том, что, как только клиент принимает кандидата, никакое время не выделяется для устранения ошибки или уборки, таким образом усиливая аргумент в пользу того, чтобы сделать разметку совместимой во-первых.
, Если Вам не дадут время спустя, сделайте это теперь.
, Если Вам дают время спустя, тогда у Вас было время, чтобы сделать это так или иначе.
Проблема в том, понимаете вы это или нет, javascript невидимо перемещает все объявления var в верхнюю часть области видимости функции.
так что если у вас есть такая функция
var i = 5;
function testvar () {
alert(i);
var i=3;
}
testvar();
окно предупреждения будет содержать неопределенное значение. потому что внутри это было изменено на это:
var i = 5;
function testvar () {
var i;
alert(i);
i=3;
}
testvar();
это называется «подъем». Причина, по которой Крокфорд так настоятельно рекомендует, чтобы объявления var располагались наверху, заключается в том, что это заставляет код явно соответствовать тому, что он собирается делать, вместо того, чтобы допускать невидимое и неожиданное поведение.
Отсутствие области видимости блока объясняет приведенный ниже код:
var a = 1;
if (something) {
var a = 2;
}
alert(a); // Alerts "2"
В большинстве языков C-стиля (как и в синтаксисе) определение var a = 2
будет определять ' a 'только для области блока if
. Использование единственного оператора var в верхней части функции помогает избежать этой странности Javascript, которая не всегда так очевидна, как приведенная выше, и была бы неожиданной для программистов C / C # / Java.
Обычно в блоках JavaScript ( {...}
) не вводят новую область видимости, есть только область действия функции, поэтому область не создается ни в одном другом операторе .
Переменная, введенная в любом месте функции, видна повсюду в функции.
Например:
function myFunction(){
var one = 1;
if (one){
var two = one + 1;
}
(function () {
var three = one + two;
})();
// at this point both variables *one* and *two* are accessible but
// the variable *three* was declared in the scope of a inner function
// and is not accessible at this point.
}
В языках с областью видимости блока рекомендуется объявлять переменные в точке первого использования, но поскольку JavaScript этого не делает имеют область видимости блока, лучше объявить все переменные функции в верхней части функции.
Проверьте эту статью .
Да, это означает, что вы объявляете все переменные в начале функции. Хотите ли вы сделать это одной или несколькими строками - это вопрос выбора.
Причина объяснена в упомянутом вами абзаце. Переменные Javascript имеют только область функционального уровня. Если вы объявите ту же переменную внутри блока if / while / for, она будет перезаписана новым значением, поскольку блок не имеет новой области видимости. Это отличается от таких языков, как Java. Чтобы избежать таких сюрпризов, объявите все переменные, которые вы собираетесь использовать в функции, в начале функции, чтобы случайно не «повторно объявить» и все такое.