Один var на функцию в JavaScript?

Создание совместимого HTML подобно обеспечению, чтобы у Вас не было предупреждений во время компиляции - предупреждения там по причине, Вы не можете понять, какова та причина, но проигнорируйте предупреждения и перед знанием, где Вы, там как так многие, Вы не можете определить тот, который это относится к проблеме, которую Вы пытаетесь решить.

при использовании Firefox для просмотра веб-страниц, Вы получите полезную зеленую галочку или Красный Крест в правом нижнем угле, быстро показывая Вам, соответствовали ли Вы или нет. Нажатие на Красный Крест покажет Вам все места, где Вы попали впросак. Некоторые предупреждения/ошибки могут казаться немного педантичными, но зафиксировать их, и Вы извлечете выгоду во многих отношениях.

  1. Ваша страница, намного более вероятно, будет работать с более широким диапазоном браузеров.
  2. соответствие Доступности будет легче (у Вас будут атрибуты 'высокого звука' на Ваших изображениях, например)
  3. , Если Вы выберете XHTML в качестве стандарта, Ваша разметка, более вероятно, будет полезна в среде Ajax.

Отказ сделать это приводит к непредсказуемости.

Одна из самых больших проблем с веб-браузерами - то, что они увековечили дурные привычки (И все еще сделайте, в некоторых случаях) путем тихого исправления определенных проблем разметки, таких как отказ закрыть ячейки таблицы и/или строки. Этот единственный факт привел к тысячам веб-страниц, которые не совместимы, но 'работают', убаюкивая их разработчиков в ложное чувство безопасности.

, Когда Вы рассматриваете, сколько там вещи, это может пойти не так, как надо с веб-сайтом, быть ленивым когда дело доходит до соответствия просто добавляет больше проблем к Вашей рабочей нагрузке.

РЕДАКТИРОВАНИЕ: читая Ваше исходное сообщение снова, я замечаю, что Вы говорите, что не беспокоитесь соответствием при работе над прототипом, тогда Вы продолжаете, что Вы обычно используете прототип в производстве - это означает, что это не строго прототип, но кандидат. Нормальная ситуация при таких обстоятельствах состоит в том, что, как только клиент принимает кандидата, никакое время не выделяется для устранения ошибки или уборки, таким образом усиливая аргумент в пользу того, чтобы сделать разметку совместимой во-первых.

, Если Вам не дадут время спустя, сделайте это теперь.

, Если Вам дают время спустя, тогда у Вас было время, чтобы сделать это так или иначе.

51
задан Paul DelRe 27 November 2012 в 04:46
поделиться

4 ответа

Проблема в том, понимаете вы это или нет, 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 располагались наверху, заключается в том, что это заставляет код явно соответствовать тому, что он собирается делать, вместо того, чтобы допускать невидимое и неожиданное поведение.

72
ответ дан 7 November 2019 в 10:10
поделиться

Отсутствие области видимости блока объясняет приведенный ниже код:

var a = 1;
if (something) {
    var a = 2;
}

alert(a); // Alerts "2"

В большинстве языков C-стиля (как и в синтаксисе) определение var a = 2 будет определять ' a 'только для области блока if . Использование единственного оператора var в верхней части функции помогает избежать этой странности Javascript, которая не всегда так очевидна, как приведенная выше, и была бы неожиданной для программистов C / C # / Java.

6
ответ дан 7 November 2019 в 10:10
поделиться

Обычно в блоках 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 этого не делает имеют область видимости блока, лучше объявить все переменные функции в верхней части функции.

Проверьте эту статью .

8
ответ дан 7 November 2019 в 10:10
поделиться

Да, это означает, что вы объявляете все переменные в начале функции. Хотите ли вы сделать это одной или несколькими строками - это вопрос выбора.

Причина объяснена в упомянутом вами абзаце. Переменные Javascript имеют только область функционального уровня. Если вы объявите ту же переменную внутри блока if / while / for, она будет перезаписана новым значением, поскольку блок не имеет новой области видимости. Это отличается от таких языков, как Java. Чтобы избежать таких сюрпризов, объявите все переменные, которые вы собираетесь использовать в функции, в начале функции, чтобы случайно не «повторно объявить» и все такое.

4
ответ дан 7 November 2019 в 10:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: