JavaScript: строгий режим и анонимные функции - PullRequest
10 голосов
/ 16 мая 2011

Почти все мои файлы JS обернуты в анонимные функции. Если я включу "use strict"; вне анонимной функции, будет ли строгий режим применяться к анонимной функции?

Например, строгий режим применяется к внутреннему телу анонимной функции в приведенном ниже скрипте:

"use strict";

(function() {
    // Is this code running under strict mode?
})(); 

1 Ответ

8 голосов
/ 16 мая 2011

Согласно статье Джона Ресига , если вы включите строгий режим в верхней части файла, это относится ко всему файлу / сценарию.Так что да, это подразумевает, что он будет применяться в анонимной функции.

Вы также можете добавить его в функцию, и в этом случае он применяется только к этой конкретной функции.

Отредактировано, чтобы добавить:вот полная спецификация .Один соответствующий абзац:

10.1.1 Код строгого режима

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

  • Глобальный код является строгим глобальным кодом, если он начинается с Пролога Директивы, который содержит Директиву строгого использования (см. 14.1).
  • Eval-код - это строгий eval-код, если он начинается с пролога директивы, содержащей директиву Use Strict, или если вызов eval является прямым вызовом (см. 15.1.2.1.1) к функции eval, которая содержится в нем.в строгом режиме кода.
  • Код функции, который является частью FunctionDeclaration, FunctionExpression или аксессора. PropertyAssignment является строгим кодом функции, если его FunctionDeclaration, FunctionExpression или PropertyAssignment содержится в коде строгого режима или если код функции начинается с директивного пролога, который содержитИспользуйте Строгую Директиву.
  • Код функции, который передается в качестве последнего аргумента встроенному конструктору Function, является строгим кодом функции, если последний аргумент является строкой, которая при обработке как FunctionBody начинается с пролога Directive, содержащего директиву Use Strict.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...