Как уже упоминалось в комментариях, код оценивается в глобальной области видимости, поэтому невозможно отменить объявление переменной, объявленной с помощью let
и т. Д., Как глобальной, за исключением перезагрузки текущего окна.
Оценка
let str = "Hello";
подряд всегда вызывает ошибку Identifier 'str' has already been declared
.
Одним из обходных путей является оценка кода как полных фрагментов в области блока:
{
let str = "Hello";
console.log(str);
}
Обратите внимание, что блоки не имеют возвращаемого значения (они являются операторами, а не выражениями), но последнее выражение в блоке обрабатывается консолью, поэтому console.log
можно опустить.
{ let str = "Hello"; str }
выведет Hello
в консоли.
В качестве альтернативы IIFE можно использовать для возврата значения:
(() => {
let str = "Hello";
return str;
})()
Во избежание этой проблемы старайтесь избегать объявлений в области видимости блоков в консоли. Этот фрагмент может быть оценен без проблем подряд:
var str = "Hello"; // instead of `let str = "Hello"`
var Foo = class Foo {} // instead of `class Foo {}`