JavaScript Строгий режим — 'use strict'
На протяжении долгого времени 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»?
Вопрос кажется риторическим, но это не так.
Кто-то посоветует начинать каждый скрипт с 'use strict'
… Но есть способ покруче.
Современный JavaScript поддерживает «классы» и «модули» — продвинутые структуры языка (и мы, конечно, до них доберёмся), которые автоматически включают строгий режим. Поэтому в них нет нужды добавлять директиву 'use strict'
.
Подытожим: пока очень желательно добавлять 'use strict'
; в начале ваших скриптов. Позже, когда весь ваш код будет состоять из классов и модулей, директиву можно будет опускать.
Пока мы узнали о use strict
только в общих чертах.
В следующих главах, по мере расширения знаний о возможностях языка, мы яснее увидим отличия между строгим и стандартным режимом. К счастью, их не так много, и все они делают жизнь разработчика лучше.
Все примеры в этом учебнике подразумевают исполнение в строгом режиме, за исключением случаев (очень редких), когда оговорено иное.