const не работает в инструментах разработчика Edge 15

Я бегу Edge/15.15063. "Могу ли я использовать" говорит, что const должен работать.

Бег:

const x = 'woo'

Затем:

console.log(x)

Возвращает

'x' is undefined

Скриншот:

Почему не работает const?

2 ответа

Решение

Я подозреваю, что консоль Edge использует with Заявление под его крышками, как и другие реализации сделали. Это объяснило бы varи даже function декларации поднимаются наружу в глобальную сферу, ноletа такжеconstбудет заблокирован в области блока:

with (…) {
    const x = 'woo'
}
// next input:
with (…) {
    console.log(x) // obviously undeclared
}

Попробуйте ввести их в многострочном режиме, в одной оценке - там они должны работать.

Но вы также можете захотеть сообщить об ошибке, поскольку консоль действительно должна оценивать вещи в глобальной области видимости.

Я думаю, что я понял это, но это скорее предположение, чем ответ. Слишком долго для комментария, хотя.

Я думаю, что происходит то, что const а также let не создавайте неявные глобальные переменные при использовании в области верхнего уровня таким же образом var делает. Хотя переменные верхнего уровня созданы с const а также let являются глобальными, они не являются свойствами глобального window объект.

Если консоль MS полагается на это неявное window создание свойства для доступа к переменным, созданным в консоли, затем const а также let не будет работать.

Я не уверен во внутренней работе Chrome Dev Tools, но, похоже, создается анонимная функция-оболочка для кода, выполняемого в консоли:

throw new Error;

VM679: 1 необнаруженная ошибка при анонимном: 1: 7

(function() { throw new Error; })();

VM759: 1 необнаруженная ошибка при анонимном:1:21 при анонимном:1:33

Я не уверен, что здесь происходит другая песочница, я не обязательно нашел много документации по ней.

Другие вопросы по тегам