Если объявить переменную через let в строке, вызывающей ошибку ReferenceError
, то потом использовать это имя переменной что-то не получается. delete
не помогает.
let justSomeVar = itHaveNeverExisted // ReferenceError: itHaveNeverExisted is not defined
let justSomeVar = 0 // TypeError: Identifier 'justSomeVar' has already been declared
justSomeVar = 0 // ReferenceError: justSomeVar is not defined
Что можно сделать, чтобы нормально продолжать работать (без перезапуска nodejs) и всё-таки объявить переменную с этим именем?
Вервия nodejs 6.5.0.
В консоли Google Chrome 56.0.2924.87 (64-bit) та же проблема:
Перевод ответа @Bergi
это случается когда в глобальном скопе появляется временная мертвая зона. Как ты можешь знать, определения let
всплывают, но остаются неинициализироваными. Из-за потока выполнения, в некоторых случаях переменные могут быть никогда не инициализированы:
function …() {
if (false)
example; // при выполнении кинет исключение ReferenceError
… // какие-то действия
if (true)
return; // выход!
let example = 5; // никогда не выполнится
}
Все хорошо, если речь идет о функциональном скопе. Может быть, что-то пойдет не так, может быть переменная вообще не понадобится - при следующем вызове будет создан новый скоп с новой переменной.
Что-то похожее происходит и в глобальном скопе, когда исключение случается до инициализации переменной (только исключение работает тут, как конструкция потока управления, больше ничего не может вызвать тот же эффект).
throw new Error;
let example = 5;
В отличие от функционального скопа, очень важно, что в данном случае переменная осталась неинициализированной. Глобальный скоп постоянен, и переменная постоянно мертва. Она никогда не будет инициализирована, и лексические переменные невозможно будет переопределить (что поможет избежать ошибок).
Это обсуждали на es-discuss, но сочли несущественным. Если при выполнении скриптов на глобальном уровне кидается ошибка, то у вас есть проблемы побольше, чем неинициализированные переменные. Нет возможности восстановления. Если вам это нужно (например, попытаться переопределить переменную в успешных скриптах), вы в любом случае должны использовать var
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Подскажите как реализовать выход с аккЕсть ссылка и по нажатию отправляется динамически форма, с помощью пост запроса, на указанный url
Помогите верстать это местоВ Bootstrap'е оно называется Collapse
Как перенаправить клиента на новую страницу при помощи JS/jQuery? Перевод вопроса "How to redirect to another webpage in JavaScript/jQuery?"