Почему в журнале консоли отображается переменная, которая уже определена

#javascript #jquery

Вопрос:

Любопытно, почему это происходит

 if(typeof TEST === "undefined") {  var TEST = true;  console.log(TEST); }  

если я помещаю в консоль , он возвращает значение true , если я снова добавляю в консоль , то журнал консоли не отображается, что именно так, как я предполагаю, должно работать.

Когда я помещаю в интервал , почему он продолжает регистрировать переменную, даже если она определена ?

 setInterval(function(){  if(typeof TEST === "undefined") {  var TEST = true;  console.log(TEST);  } }, 1000);  

Как вы можете заставить его перестать показывать журнал после его определения ? Без очистки интервала

Ответ №1:

Если вы поместите его в консоль, то var создадите переменную в области верхнего уровня. Он не определен, поэтому вы присваиваете ему значение true. Если вы снова поместите его в консоль, то это будет true сделано в предыдущий раз.

Если вы помещаете его в функцию, то область его действия ограничивается функцией, поэтому каждый раз, когда вы запускаете функцию, вы создаете новую область и новую var TEST .

Вместо этого объявите переменную в области вне функции.

Ответ №2:

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

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

Если вы удалите var объявление в setInterval() версии, оно будет присвоено глобальной переменной и останется определенным.

Ответ №3:

Самое простое решение, вероятно, состоит в том, чтобы использовать let или const вместо var этого . Если, конечно, у вас есть такая возможность.