2014-02-02 3 views
2

Я знаю, что JavaScript не имеет более мелкозернистых областей, чем «глобальные» или «для каждой функции». Но есть ли реальная проблема с написанием что-то вроде:Повторное использование VAR с заданным именем в переменных цикла?

function test() { 
    for (var i = 10; i < 20; i++) { /* ... */ } 
    for (var i = 03; i < 04; i++) { /* ... */ } 
} 

Это раздражает, чтобы держать придумывают новые названия для индексации переменных (это то, что я делал: fooIndex, barIndex и т.д.) и перемещение декларации в верхней части функции не велик либо:

function test() { 
    var i; 
    for (i = 10; i < 20; i++) { /* ... */ } 
    for (i = 03; i < 04; i++) { /* ... */ } 
} 

Тогда, если ваши применения далеки от декларации, вы можете забыть удалить неиспользуемые переменные. Или вы можете случайно записать в глобальный масштаб, потому что считаете, что у вас есть var-declare, что вы этого не сделали.

Кажется, что меньшее зло ставит var на все, что вы намереваетесь быть локальными. Это? Согласно this answer, переопределение его как var более одного раза не имеет никакого эффекта, но эта ситуация более надуманна, чем переменные цикла. Есть ли по-настоящему веская причина не делать такие вещи, как первый случай выше?

+2

Это * только * стилистическая проблема - я лично предпочитаю держать «уаг близко» (и использовать различные имя переменной), но разные линтеры и инструменты статического анализа имеют свои собственные предрассудки. Хотя, я бы не стал префиксным числом с 0, если я не хотел * восьмеричный ;-) – user2864740

+0

('var' - это объявление в масштабе всей области, а не« исполняемый оператор », из-за« подъема »размещения« var », в пределах та же область функций/программ, * не влияет * на правильность программы.) – user2864740

+0

@ useruser2864740 Моя сложная часть - продолжать придумывать кучу имен для «индекса». Я мог бы придерживаться своей текущей стратегии (вашей) или отдать себя до linter, чтобы уловить проблемы, возникающие при размещении объявлений наверху. Я не знаю. Вздох, JavaScript, ты меня ранил ... * (Примечание: как это бывает в этом случае, я хочу восьмеричное. :-) [Мое альтер-эго д-р Ребму может быть обманом] (http: //codegolf.stackexchange .com/a/16712/57)) * – HostileFork

ответ

3

Как я уже говорил в комментариях выше, Там нет реального риска попадания в strict mode необъявленной var, но я думаю, что это просто дело вкуса, я привык, чтобы объявить все сверху, и установите "strict mode".

Однако я согласен с тем, что он не решает проблему сброса переменных. Обычно у меня есть последовательное количество имен переменных, но выбор за вами и только то, что подходит вам лучше, если оно не наносит вреда вашим отладочным процессам.

Кроме того, я хотел бы настаивать на том, что "strict mode" всегда должен быть включен, это поможет вам многое для отладки.

EDIT:, если вы не знакомы с "strict mode", вы можете иметь подробное объяснение here on mdn

+1

Строгий режим был для меня новым, спасибо. Я возился с JavaScript снова и снова, потому что ... ну, я должен сделать код в браузере. Лично ожидая, когда [Red] (http://www.red-lang.org/p/contributions.html) получит JS-сервер, и мне никогда не придется напрямую программировать в JavaScript (!): -/Но до тех пор , спасибо за информацию, я сейчас буду помещать это во все мои файлы. – HostileFork

Смежные вопросы