На протяжении долгого времени JavaScript развивался без проблем с обратной совместимостью. Новые функции добавлялись в язык, в то время как старая функциональность не менялась.
Преимуществом данного подхода было то, что существующий код продолжал работать. А недостатком – что любая ошибка или несовершенное решение, принятое создателями JavaScript, застревали в языке навсегда.
Так было до 2009 года, когда появился ECMAScript 5 (ES5). Он добавил новые возможности в язык и изменил некоторые из существующих. Чтобы устаревший код работал, как и раньше, по умолчанию подобные изменения не применяются. Поэтому нам нужно явно их активировать с помощью специальной директивы: "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
имеет значение, вы можете получить неправильные результаты.
Итак, как можно включить 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
только в общих чертах.
В следующих главах, по мере расширения знаний о возможностях языка, мы яснее увидим отличия между строгим и стандартным режимом. К счастью, их не так много, и все они делают жизнь разработчика лучше.
Все примеры в этом учебнике подразумевают исполнение в строгом режиме, за исключением случаев (очень редких), когда оговорено иное.