07. Strict Mode
Строгий режим включается при помощи декларации 'use strict'
добавляемой в начало JS файла или функции.
В строгом режиме были добавлены новые ключевые слова, используемые в 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?