JavaScript while цикл принимает условие перед объявлением var

Вопрос:

Я удивлен, что работает следующий код:

while(fred !== "stop"){
var fred = prompt("Should I stop or go?")
};

Я бы понял это в цикле do while:

do {
code to be executed at least once
​}
while (condition);

Как JavaScript может настроить условие до того, как функция объявила fred как переменную?

Другие вопросы, которые я прочитал, относятся к объявлениям var внутри условного выражения.

Лучший ответ:

JavaScript является бит нечетным при объявлении переменных с var; они объявляются в области функций, а не в области блока, как и другие языки. Если внутри вашей функции есть var, то в конце объявление объявляется до начала (а не экземпляра); поэтому ваш код будет:

function () {
    var fred;
    while(fred !== "stop"){
        fred = prompt("Should I stop or go?")
    };
}

Когда только что объявлено, переменная существует и получает значение undefined. Если вы хотите использовать более разумные переменные с областью, используйте let/const. Тогда вы получите ожидаемое поведение.

Ответ №1

Из документации Mozilla:

Объявления переменных, где бы они ни возникали, обрабатываются до того, как будет выполнен какой-либо код.

а также

Поскольку объявления переменных (и декларации в целом) обрабатываются до того, как выполняется какой-либо код, объявление переменной в любом месте кода эквивалентно объявлению ее вверху. Это также означает, что переменная может быть использована до ее объявления. Это поведение называется «подъем», поскольку, как представляется, объявление переменной перемещается в начало функции или глобального кода.

и предупреждение:

Важно отметить, что подъем влияет на объявление переменной, но не на инициализацию значения. Значение присваивается при выполнении оператора присваивания:

Ответ №2

Прежде чем объявлять fred, fred не undefined, поэтому undefined !== "stop", что верно.

Оцените статью
TechArks.Ru
Добавить комментарий