Подтвердить что ты не робот

Что такое расширенный режим?

Я играю с let в Node v0.10.12. Используя флаг --harmony, следующий код создает синтаксическую ошибку:

for (let i = 0; i < 2; i += 1) {
    console.log('i', i);
}

СинтаксисError: недопустимая декларация за пределами расширенного режима

Однако, если я также использую флаг --use-strict, тогда код работает как ожидалось.

Почему возникает синтаксическая ошибка при использовании флага --harmony? Что такое расширенный режим? Какая связь со строгим режимом?

4b9b3361

Ответ 1

Похоже, что "расширенный режим" был удален из текущей версии развития спецификации гармонии 27 февраля 2012 года, но есть описание того, что предполагалось быть в нескольких старых (это с 16 января 2012 года):

10.1.2 Расширенный код

Расширенный код - это любой код, содержащийся в синтаксисе программы ECMAScript единица, которая содержит вхождения лексических или синтаксических производств определенных после пятого издания ECMAScript Спецификация. Код интерпретируется как расширенный код в следующем ситуации:

  • Глобальный код - это расширенный глобальный код, если он содержится в синтаксической единице программы ECMAScript, которая была обозначена как расширенный программный блок в определенном порядке реализации или если.

  • Eval code - расширенный код eval, если вызов eval является прямым вызовом (см. 15.1.2.1.1) для функции eval, которая содержится в код расширенного режима или если он начинается с.

  • Код функции, являющийся частью FunctionDeclaration, FunctionExpression или accessor PropertyAssignment - это расширенный функциональный код, если его FunctionDeclaration, FunctionExpression или PropertyAssignment содержится в коде расширенного режима или если код функции начинается с..

  • Код функции, который поставляется в качестве последнего аргумента встроенному конструктору функций, является строгим кодом функции, если последний аргумент является Строка, которая при обработке как FunctionBody начинается с..

Термин "строгий код" используется для обозначения как строгого режима код и расширенный код, в то время как термин "расширенный код" обозначает только фактический расширенный код. Термин "базовый код" используется для обозначения кода это не расширенный код.

Что касается связи со строгим режимом, это, по-видимому, характерно для V8 (экспериментальной) реализации. Здесь, что журнал изменений для версии 10062, в котором введен флаг --harmony, говорит:

Этот CL вводит третий режим рядом с нестрогим (отныне "классический режим" ) и "строгий режим", который называется "расширенным mode", как в текущих черновиках спецификации ES.next. Расширенные режим основан на "строгом режиме" и добавляет к нему новые функции. Это означает, что большая часть семантики этих двух режимов совпадает.

"расширенный режим" вводится вместо "строгого режима" во время синтаксический анализ при использовании директивы "строгого режима" "строго придерживаться" и когда флажок согласования гармоник активен. Это должно быть изменено после его полностью указано, как вводится "расширенный режим" .

Ответ 2

Как получить гармонию в node.js

Флаг --harmony позволяет функции ES Harmony. кажется, что --harmony позволяет использовать новые функции ECMA на языке, основанные на v8, прокси, слабые карты, наборы, карты, семантику типов и область обзора блока, когда этот флаг используется, и это расширенные функции и после расширения этих функций вы можете использовать, например, let (для блочного охвата) с strict mode, только потому, что он основан на нем, иначе он будет бросать

SyntaxError: недопустимое объявление декларации вне расширенного режима.

Расширенный режим:. Когда вы используете новые функции ECMA (ECMAScript 5), вы находитесь в расширенном режиме языка, и в этом режиме новые функции ECMAScripts (расширенный код) и синтаксис могут используется только в строгом режиме

Понятие "расширенный код", что означает код, который может использовать новый Es.next синтаксис.

Harmony:

"Гармония" - это название основного обновления для JavaScript, которое должно появиться к концу 2013 года. В 2008 году после много споров Технический комитет ECMA 39, которому было поручено создать следующее поколение JavaScript, согласился для совместной работы над обновлением "Гармонии" для JavaScript и с тех пор он находится в разработке. Ряд предлагаемых функций Гармонии поддерживается реализацией Google. К ним относятся привязки с привязкой к блокам и добавление ключевого слова let, эффективных карт и наборов для устранения необходимости "злоупотреблять объектами как словари", слабые карты для сборных таблиц/значений для сбора мусора и прокси, которые могут имитировать любой объект или функцию JavaScript, чтобы включить настройку.

Некоторые хорошие читают здесь и слышать. Также из Chromium Blog.

Также из Paul Irish:

François Beaufort (первоначально поделился): новый флаг с именем Enable Экспериментальный JavaScript появился на странице chrome://flags последний Chromium build. Этот флаг позволяет веб-страницам использовать экспериментальные Функции JavaScript.

Чтобы использовать функции расширенного режима/гармонии теперь в Chrome, мы должны включить это, и мы можем включить это, перейдя к chrome://flags и можем переключать (включать/отключать) на "Экспериментальные функции JavaScript".