В спецификации языка ES5 ввели строгий режим "use strict", который обеспечивает более чистый JavaScript код, с меньшим количеством небезопасных особенностей. Например, строгий режим заменяет исключениями некоторые ошибки, которые ранее молча пропускались. Также строгий режим исправляет ошибки, которые мешали JavaScript-движкам выполнять оптимизацию — в некоторых случаях код в строгом режиме может быть оптимизирован для более быстрого выполнения, чем код в обычном режиме. Нормальный (нестрогий) режим иногда называют “sloppy mode”.

Для включения строгого режима нужно ввести "use strict"; в начале файла JavaScript

Обратите внимание, что JavaScript-движки, которые не поддерживают ES5, просто игнорируют эту команду, так как запись строк таким образом обычно ничего не делает.

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

function foo() {
 "use strict";

 //...

}

Это удобно, когда вы работаете со старым кодом, где полное переключение кода в строгий режим может плохо сказаться на его выполнении.

Строгий режим рекомендуется использовать всегда при написании нового кода, но с некоторыми предостережениями — нельзя бездумно объединять скрипты с разными режимами. А также, включение строгого режима для существующего кода может нарушить его работу. Код может полагаться на особенности или поведение, которое больше недоступно или отличается в строгом режиме. Объединение только строгих или только обычных скриптов проходит без последствий, проблему вызывает совместное использование скриптов со строгим и обычным режимом или включение строго режима для уже существующего кода.

Теперь рассмотрим некоторые особенности строго режима, которые позволяют улучшить чистоту кода и избежать возможных ошибок. В действительности, описанные здесь ограничения вам не стоит использовать даже в обычном режиме.

  1. Переменные должны быть объявлены в строгом режиме

    Все переменные должны быть явно объявлены в строгом режиме. Это помогает предотвратить возможные ошибки и некорректную работу кода.

    "use strict";
    mistypedVariable = 17;
    
    > Uncaught ReferenceError: mistypedVariable is not defined
    
    function strictFunc() {
        "use strict";
        strictVar = 123;
    }
    strictFunc();
    
     > Uncaught ReferenceError: strictVar is not defined
    
  2. Имена аргументов в объявлении функций должны встречаться только один раз.

    В обычном коде последний повторенный аргумент скрывает предыдущие аргументы с таким же именем. Тем не менее, такое сокрытие несёт в себе мало смысла и, скорее всего, не имеет под собой цели (например, может скрывать опечатку), поэтому, в строгом режиме дублирование имён аргументов является синтаксической ошибкой:

    function sum(a, a, c) { // синтаксическая ошибка
        "use strict";
        return a + b + c; // ошибка, если код был запущен (> Uncaught ReferenceError: b is not defined)
    }
    
    > Uncaught SyntaxError: Duplicate parameter name not allowed in this context
    
  3. Строй режим запрещает или изменяет поведение некоторых устаревших и ненадежных конструкций

    Например, запрещает конструкцию with и изменяет принцип работы метода eval. Эти конструкции будут рассматриваться в следующих частях курса.

В большинстве браузеров, в настоящее время, строгий режим реализован. Однако, существуют версии браузеров, поддерживающие строгий режим лишь частично или вовсе его не поддерживающие. Старайтесь тестировать свой код в браузерах, как поддерживающих, так и не поддерживающих строгий режим. Если вы проводите тестирование только в тех браузерах, которые не поддерживают строгий режим, то вполне вероятно у вас появятся проблемы в браузерах, его поддерживающих, и наоборот.

Дата изменения:

Обнаружили ошибку или хотите добавить что-то своё в документацию? Отредактируйте эту страницу на GitHub!

Оставить комментарий