#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
этого . Если, конечно, у вас есть такая возможность.