На протяжении долгого времени JavaScript развивался без проблем с обратной совместимостью. Новые функции добавлялись в язык, в то время как старая функциональность не менялась.

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

Так было до 2009 года, когда появился ECMAScript 5 (ES5). Он добавил новые возможности в язык и изменил некоторые из существующих. Чтобы старый код работал, большинство таких модификаций по умолчанию отключены. Вы должны явно включить их с помощью специальной директивы: "use strict".

«use strict»

Директива выглядит как строка: "use strict" или 'use strict'. Когда она находится в верхней части скрипта, весь сценарий работает в «современном» режиме.

Например:

"use strict";

// этот код работает в современном режиме
...

Позже мы изучим функции (способ группировки команд). Забегая вперёд, заметим, что "use strict" можно поставить в начале большинства видов функций, вместо всего скрипта. Это позволяет включить строгий режим только в этой функции. Но обычно люди используют его для всего файла.

Убедитесь, что «use strict» находится в начале

Проверьте, что "use strict" находится в первой исполняемой строке скрипта, иначе строгий режим может не включиться.

Здесь строгий режим не включён:

alert("some code");
// "use strict" ниже игнорируется - он должен быть в первой строке

"use strict";

// строгий режим не активирован

Над "use strict" могут быть записаны только комментарии.

Нет никакого способа отменить use strict

Нет такой директивы как "no use strict", которая возвращает движок к старому поведению.

Как только мы входим в строгий режим, отменить это невозможно.

Консоль браузера

В будущем, когда вы будете использовать консоль браузера для тестирования функций, обратите внимание, что use strict по умолчанию в ней выключен.

Иногда, когда use strict имеет значение, вы можете получить неправильные результаты.

Можно использовать Shift+Enter для ввода нескольких строк и написать в верхней строке use strict:

'use strict'; <Shift+Enter для перехода на новую строку>
//  ...ваш код...
<Enter для запуска>

В большинстве браузеров, включая Chrome и Firefox, это работает.

В старых браузерах консоль не учитывает такой use strict, там можно «оборачивать» код в функцию, вот так:

(function() {
  'use strict';

  // ...ваш код...
})()

Всегда используйте «use strict»

Нам ещё предстоит рассмотреть различия между строгим режимом и режимом «по умолчанию».

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

На данный момент достаточно иметь общее понимание об этом режиме:

  1. Директива "use strict" переключает движок в «современный» режим, изменяя поведение некоторых встроенных функций. Позже в учебнике мы увидим подробности.
  2. Строгий режим включается путём размещения "use strict" в верхней части скрипта или функции. Некоторые функции языка, такие как «классы» и «модули», автоматически включают строгий режим.
  3. Строгий режим поддерживается всеми современными браузерами.
  4. Мы рекомендуем всегда начинать скрипты с "use strict". Все примеры в этом руководстве предполагают строгий режим, если (очень редко) не указано иное.
Карта учебника

Комментарии

перед тем как писать…
  • Если вам кажется, что в статье что-то не так - вместо комментария напишите на GitHub.
  • Для одной строки кода используйте тег <code>, для нескольких строк кода — тег <pre>, если больше 10 строк — ссылку на песочницу (plnkr, JSBin, codepen…)
  • Если что-то непонятно в статье — пишите, что именно и с какого места.