Неожиданное поведение в константном назначении ES6

1

Учитывая следующее:

const foo = foo; // Uncaught ReferenceError: foo is not defined

Попытка следить за:

const foo = 123; // Uncaught SyntaxError: Identifier 'foo' has already been declared

foo никогда не устанавливается, и подобное поведение наблюдается как в Chrome, так и в Firefox.

Что здесь происходит?

Теги:
ecmascript-6

1 ответ

2
Лучший ответ

То, что вы здесь испытываете, - это временная мертвая зона. Переменная foo была объявлена, но еще не инициализирована. Фактически вы пытались инициализировать его как должное, но оценка этого выражения породила исключение, прежде чем foo может быть установлено в значение. Теперь он вечно неинициализирован - у вас был только один шанс.

Это известная проблема. От es- discuss (Джейсон Орендорф):

Я просто понял, что это имеет неудачные последствия для REPL. Предположим, вы сделали эту опечатку:

js> let x = Math.cso(a)    // oops, TypeError, should be Math.cos

Теперь x в вашем REPL неуправляемо. Это кажется плохим.

Я думаю, мы можем исправить это, сделав REPL изгибом правила языка. Но это довольно сложно сделать для REPL, реализованных в JS. Возможно, правила должны быть немного более прощающими.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню