Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ
41. Директива use strict в JavaScript
Эта директива пишется в начале сценария или функции. Так и пишется:
"use strict";
И для чего же она нужна? Все что ниже директивы "use strict"
, является строгим кодом. Строгий, это код, написанный по новому стандарту. Например, в старом стандарте можно было не объявлять переменную, а в новом нужно объявлять.
"use strict";
a = 10; // Ошибка: переменная не объявлена
document.write(a);
А так будет работать, если объявить переменную:
var a;
"use strict";
a = 10;
document.write(a);
Эти пункты взяты из книги: "Дэвид Флэнаган - JavaScript. Подробное руководство (6-е издание)"
- В строгом
режиме
не допускается
использование
инструкции
with
. - В строгом
режиме
все переменные
должны
объявляться:
если
попытаться
присвоить
значение
идентификатору,
который
не является
объявленной
переменной,
функцией,
параметром
функции,
параметром
конструкции
catch или
свойством
глобального
объекта,
возбуждается
исключение
ReferenceError
. (В нестрогом режиме такая попытка просто создаст новую глобальную переменную и добавит ее в виде свойства в глобальный объект.) - В строгом
режиме
функции,
которые
вызываются
как функции
(а не как методы),
получают
в ссылке
this
значениеundefined
. (В нестрогом режиме функции, которые вызываются как функции, всегда получают в ссылкеthis
глобальный объект.) Это отличие можно использовать, чтобы определить, поддерживает ли та или иная реализация строгий режим:var hasStrictMode = (function() { "use strict"; return this===undefined}());
Кроме того, когда функция вызывается в строгом режиме с помощьюcall()
илиapply()
, значение ссылкиthis
в точности соответствует значению, переданному в первом аргументе функцииcall()
илиapply()
. (В нестрогом режиме значенияnull
иundefined
замещаются ссылкой на глобальный объект, а простые значения преобразуются в объекты.) - В строгом
режиме
попытки
присвоить
значения
свойствам,
недоступным
для
записи,
или создать
новые
свойства
в нерасширяемых
объектах
порождают
исключение
TypeError
. (В нестрогом режиме эти попытки просто игнорируются.) - В строгом
режиме
программный
код, передаваемый
функции
eval()
, не может объявлять переменные или функции в области видимости вызывающего программного кода, как это возможно в нестрогом режиме. Вместо этого переменные и функции помещаются в новую область видимости, создаваемую для функцииeval()
. Эта область видимости исчезает, как толькоeval()
вернет управление. - В строгом
режиме
объект
arguments
в функции хранит статическую копию значений, переданных функции. В нестрогом режиме объектarguments
ведет себя иначе – элементы массиваarguments
и именованные параметры функции ссылаются на одни и те же значения. - В строгом
режиме
возбуждается
исключение
SyntaxError
, если операторуdelete
передать неквалифицированный идентификатор, такой как имя переменной, функции или параметра функции. (В нестрогом режиме такое выражение delete не выполнит никаких действий и вернетfalse
.) - В строгом
режиме
попытка
удалить
ненастраиваемое
свойство
приведет
к исключению
TypeError
. (В нестрогом режиме эта попытка просто завершится неудачей и выражениеdelete
вернетfalse
.) - В строгом режиме попытка определить в литерале объекта два или более свойств с одинаковыми именами считается синтаксической ошибкой. (В нестрогом режиме ошибка не возникает.)
- В строгом режиме определение двух или более параметров с одинаковыми именами в объявлении функции считается синтаксической ошибкой. (В нестрогом режиме ошибка не возникает.)
- В строгом режиме не допускается использовать литералы восьмеричных целых чисел (начинающихся с 0, за которым не следует символ x). (В нестрогом режиме некоторые реализации позволяют использовать восьмеричные литералы.)
- В строгом
режиме
идентификаторы
eval
иarguments
интерпретируются как ключевые слова, и вы не можете изменить их значения. Вы сможете присвоить значения этим идентификаторам, объявив их как переменные, использовав их в качестве имен функций, имен параметров функций или идентификаторов блокаcatch
. - В строгом
режиме
ограничивается
возможность
просмотра
стека
вызовов.
Попытки
обратиться
к свойствам
arguments.caller
arguments.callee
и в строгом режиме возбуждают исключениеTypeError
. Попытки прочитать свойстваcaller
иarguments
функций в строгом режиме также возбуждают исключениеTypeError
. (Некоторые реализации определяют эти свойства в нестрогих функциях.)
Похожие уроки Codebra
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ
- Практики нет, просто нажмите "Проверить задание"
– Не пропускайте новостей, подпишитесь на нашу страницу ВКонтакте, Telegram.
– На данный момент на сайте нет возможности оставлять комментарии, но Вы можете спросить в нашей Telegram-группе.
Это займет не больше минуты.