07. Strict Mode
Строгий режим включается при помощи декларации 'use strict' добавляемой в начало JS файла или функции.
"use strict"
function strictFn() {
"use strict"
...
}В строгом режиме были добавлены новые ключевые слова, используемые в ES6, такие как let, implements, yield, static и др.
В ES6 весь код в модулях по умолчанию выполняется в строгом режиме. Таким образом со временем весь JS код будет работать в строгом режиме.
Языковые конструкции:
Не допускается использовать литералы восьмеричных целых чисел, например
00840.Не допускается использование инструкции
withВсе переменные должны объявляться. В нестрогом режиме такая попытка просто создаст новую глобальную переменную и добавит ее в виде свойства в глобальный объект.
Возбуждается исключение
SyntaxError, если операторуdeleteпередать неквалифицированный идентификатор, такой как имя переменной, функции или параметра функции.Код, передаваемый функции
eval(), не может объявлять переменные или функции в области видимости вызывающего программного кода, как это возможно в нестрогом режиме. Вместо этого переменные и функции помещаются в новую область видимости, создаваемую для функцииeval(). Эта область видимости исчезает, как толькоeval()вернет управление.Идентификаторы
evalиargumentsинтерпретируются как ключевые слова, и вы не можете изменить их значения.Нельзя использовать новые языковые конструкции, типа
protected,static,interfaceи т.д.
Функции:
Определение двух или более параметров с одинаковыми именами в объявлении функции считается синтаксической ошибкой.
Функции, которые вызываются как функции (а не как методы), получают в
thisзначениеundefined(в нестрогом режиме функции, которые вызываются как функции, всегда получают в ссылкеthisглобальный объект).Объект
argumentsв функции хранит статическую копию значений, переданных функции. В нестрогом режиме объектargumentsведет себя иначе – элементы массиваargumentsи именованные параметры функции ссылаются на одни и те же значения.Ограничивается возможность просмотра стека вызовов. Попытки обратиться к свойствам
arguments.callerиarguments.calleeв строгом режиме возбуждают исключениеTypeError.
Объекты:
Попытки присвоить значения свойствам, недоступным для записи, или создать новые свойства в нерасширяемых объектах порождают исключение
TypeError.Попытка удалить ненастраиваемое свойство приведет к исключению
TypeError.Попытка определить в литерале объекта два или более свойств с одинаковыми именами считается синтаксической ошибкой.
Last updated
Was this helpful?