См этот код:Такэй пусть переменная из временной мертвой зоны
<script>
let {foo} = null; // TypeError
</script>
<script>
// Here I want to assign some some value to foo
</script>
Первый скрипт пытается позволить объявить-foo
с помощью присвоения деструктурирующего. Тем не менее, null
не может быть разрушен, поэтому присваивание вызывает TypeError.
Проблема заключается в том, что тогда переменная foo
объявлена, но неинициализированный, так что если во 2-й сценарии я пытаюсь ссылаться foo
, он бросает:
foo = 123; // ReferenceError: can't access lexical declaration `foo' before initialization
И let
переменных не может быть повторно объявлен:
let foo = 123; // SyntaxError: redeclaration of let foo
Есть ли способ вывести его из TDZ, чтобы я мог присваивать значения и читать их?
BTW, я хочу использовать 'foo', а не обходные пути, такие как' window.foo'. – Oriol
Я предполагаю, что есть что-то интересное в первом скрипте, который затрудняет проверку действительности инициализации. – Pointy
@Oriol: 'window.foo' [все равно не работает] (http://stackoverflow.com/q/28776079/1048572) :-) – Bergi