Учитывая следующее:
const foo = foo; // Uncaught ReferenceError: foo is not defined
Попытка следить за:
const foo = 123; // Uncaught SyntaxError: Identifier 'foo' has already been declared
foo
никогда не устанавливается, и подобное поведение наблюдается как в Chrome, так и в Firefox.
Что здесь происходит?
То, что вы здесь испытываете, - это временная мертвая зона. Переменная foo
была объявлена, но еще не инициализирована. Фактически вы пытались инициализировать его как должное, но оценка этого выражения породила исключение, прежде чем foo
может быть установлено в значение. Теперь он вечно неинициализирован - у вас был только один шанс.
Это известная проблема. От es- discuss (Джейсон Орендорф):
Я просто понял, что это имеет неудачные последствия для REPL. Предположим, вы сделали эту опечатку:
js> let x = Math.cso(a) // oops, TypeError, should be Math.cos
Теперь x в вашем REPL неуправляемо. Это кажется плохим.
Я думаю, мы можем исправить это, сделав REPL изгибом правила языка. Но это довольно сложно сделать для REPL, реализованных в JS. Возможно, правила должны быть немного более прощающими.