Долгое время JavaScript развивался без проблем с совместимостью. В язык были добавлены новые функции, а старые функции не изменились.
Это имело то преимущество, что никогда не нарушало существующий код. Но недостатком было то, что любая ошибка или несовершенное решение создателей JavaScript навсегда застревали в языке.
Так было до 2009 года, когда появился ECMAScript 5 (ES5). Он добавил в язык новые функции и изменил некоторые из существующих. Чтобы старый код продолжал работать, большинство таких модификаций по умолчанию отключены. Вам необходимо явно включить их с помощью специальной директивы: "use strict"
.
Директива выглядит как строка: "use strict"
или 'use strict'
. Когда он расположен в верхней части сценария, весь сценарий работает «современно».
Например:
«используйте строгий»; // этот код работает по-современному ...
Совсем скоро мы будем изучать функции (способ группировки команд), поэтому заранее отметим, что "use strict"
можно поставить в начале функции. Это активирует строгий режим только в этой функции. Но обычно люди используют его для всего сценария.
Убедитесь, что «use strict» находится вверху.
Убедитесь, что "use strict"
находится в верхней части ваших скриптов, иначе строгий режим может быть не включен.
Строгий режим здесь не включен:
alert("какой-то код"); // «use strict» ниже игнорируется — оно должно быть вверху «используйте строгий»; // строгий режим не активирован
Над "use strict"
могут появляться только комментарии.
Невозможно отменить use strict
Не существует такой директивы, как "no use strict"
, которая возвращала бы движок к старому поведению.
Как только мы введем строгий режим, пути назад уже не будет.
Когда вы используете консоль разработчика для запуска кода, обратите внимание, что по умолчанию она не use strict
.
Иногда, когда use strict
имеет значение, вы получаете неправильные результаты.
Итак, как же на самом деле use strict
в консоли?
Во-первых, вы можете попробовать нажать Shift + Enter , чтобы ввести несколько строк, и поставить use strict
сверху, вот так:
'используйте строгий'; <Shift+Enter для новой строки> // ...ваш код <Войдите, чтобы запустить>
Он работает в большинстве браузеров, а именно Firefox и Chrome.
Если это не так, например, в старом браузере, есть уродливый, но надежный способ обеспечить use strict
. Поместите его в вот такую обертку:
(функция() { 'используйте строгий'; // ...здесь ваш код... })()
Вопрос может показаться очевидным, но это не так.
Можно было бы порекомендовать начинать скрипты с "use strict"
… Но знаете, что круто?
Современный JavaScript поддерживает «классы» и «модули» — сложные языковые структуры (мы обязательно до них доберемся), позволяющие use strict
автоматически. Поэтому нам не нужно добавлять директиву "use strict"
, если мы их используем.
Итак, пока "use strict";
является желанным гостем в верхней части ваших сценариев. Позже, когда весь ваш код будет состоять из классов и модулей, вы можете его опустить.
На данный момент нам нужно знать об use strict
в целом.
В следующих главах, по мере изучения особенностей языка, мы увидим различия между строгим и старым режимами. К счастью, их не так много, и они действительно делают нашу жизнь лучше.
Все примеры в этом руководстве подразумевают строгий режим, если (очень редко) не указано иное.