Внимание! На этой странице вы найдете материал урока из архивного курса по JavaScript. Курс был написан в 2015 и по-прежнему актуален для начинающих веб-разработчиков.
Теоретический материал сохранен в исходном виде, а практические задания с автоматической проверкой вынесены в отдельные роадмапы.
Полный список уроков доступен по тегу Архивный курс по 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.callerarguments.calleeи в строгом режиме возбуждают исключениеTypeError. Попытки прочитать свойстваcallerиargumentsфункций в строгом режиме также возбуждают исключениеTypeError. (Некоторые реализации определяют эти свойства в нестрогих функциях.)
Далее начнем изучение объектов в JavaScript.
Переходите к следующему уроку курса, а так же не забудьте посмотреть новый материал на Codebra по тегу JavaScript.
