1

Я пробовал какой-то простой JS-код. Я знал, что мы должны использовать ключевое слово var, чтобы объявить переменную цикла внутри цикла: for цикл, чтобы избежать объявления глобальной переменной. Однако я понял, что переменная цикла существует после выполнения цикла тоже:JS loop variable scope

var a = [1, 2, 3, 4, 5, 6]; 
for (var i = 0; i < a.length; i++) 
    document.write(a[i]); //123456 
document.write(i); //6 

Это не инлайн (на самом деле это не нужно быть, я знаю), с тем, как переменная цикла из for цикла в объектно-ориентированных концепции ведут себя. Я знаю, что я не должен пытаться сравнивать JavaScript с языком OO для любого аспекта. Однако я просто предполагаю, что поведение на языках OO лучше.

Я думаю, если мы поместим этот код непосредственно в тег <script>, то он фактически добавит переменную цикла в глобальную область, которая не нужна. Это так? или я думаю, что это неправильно?

Мы можем добиться такого поведения, создавая явную функцию сферы:

var a1 = [1, 2, 3, 4, 5, 6]; 
(function() { 
    for (var i1 = 0; i1 < a.length; i1++) 
     document.write(a[i1]); //123456 
})(); 

document.write(i1); //undefined 

Но это стандартный способ/а затем в производстве? Что еще можно сделать?

+0

Что делать для циклов (и их видимого поведения), связанных с ООП? – Bergi

+0

@Bergi umm Я думаю, когда мы пишем 'for (int i = 0; i Mahesha999

+0

JavaScript (и многие другие языки) не имеет области действия блока. И это не имеет никакого отношения к тому, соответствует ли язык некоторым принципам ООП или нет. – Bergi

ответ

2

Мы можем добиться такого поведения, создав явную область видимости. Но является ли это стандартным способом/следованием в производстве?

Да. Функции - это единственная возможность ввести новую область в JavaScript (хотя это может измениться в будущих версиях с let); и IIFEs также широко используются в производстве.

Что еще можно сделать?

Чтобы ограничить область действия i блоку for-loop? Нет (не говоря уже о let). Однако вам вряд ли понадобится это сделать, поскольку ничто не будет мешать ему - var i по-прежнему локально привязан к вашей функции. Иногда даже вы можете использовать i после цикла в качестве постоянного счетчика.

+0

Но значит ли это, что каждый 'for' должен быть вложен в область функций? – Mahesha999

+0

Нет. Только если вам нужно, чтобы я был явно определен в цикле, но это почти не так. – Bergi

+1

риторика? может быть да, я попытался создать его аккуратно, но не просто вызвать огромные ответы и хиты. Еще один хороший вопрос будет риторикой. Я обычно нахожу связанные важные вещи о старых темах, которые я читал, проходя через Интернет, далеко после первоначального чтения. Поэтому просто хочу проверить, не пропустил ли я что-нибудь. Это очень возможно с языком, подобным JS, который является настолько гибким и имеет отдельные книги, посвященные только шаблонам. Ответ на вопрос может быть Нет, нет другого известного способа или шаблона, чтобы решить эту проблему, но все же это добавит некоторую ценность для моего понимания. – Mahesha999

0

JavaScript имеет только function scope Любая переменная, определенная с использованием var в боковой функции, доступна только внутри функции. для цикла не создает области для переменных.

+0

да, что я знаю, но многие шаблоны, практики развиваются, чтобы использовать преимущества ООП в JS или даже сказать, чтобы заставить JS вести себя как язык OO. Просто хочу знать, существует ли какой-либо стандартный/хорошо выполненный обходной путь/шаблон для переменной цикла цикла в цикл. – Mahesha999

0

Javascript немного странный и имеет, ИМХО, много дефектов, которые делают его бедным языком для средних/больших проектов.

«var» означает, что переменная доступна только в области текущей функции: Все переменные определены при инициации, прежде чем функция будет запущена и установлена ​​в значение «undefined». Итак:

alert(i); 
var i=4; 
alert(i); 
var i=5; 
alert(i); 

внутренне означает:

var i=undefined; 
alert(i); 
i=4; 
alert(i); 
i=5; 
alert(i); 

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