Skip to content

Latest commit

 

History

History
75 lines (42 loc) · 6.49 KB

File metadata and controls

75 lines (42 loc) · 6.49 KB

Современный стандарт, "use strict"

Очень долго язык JavaScript развивался без потери совместимости. Новые возможности добавлялись в язык, но старые -- никогда не менялись, чтобы не "сломать" уже существующие HTML/JS-страницы с их использованием.

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

Так было до появления стандарта ECMAScript 5 (ES5), который одновременно добавил новые возможности и внёс в язык ряд исправлений, которые могут привести к тому, что старый код, который был написан до его появления, перестанет работать.

Чтобы этого не случилось, решили, что по умолчанию эти опасные изменения будут выключены, и код будет работать по-старому. А для того, чтобы перевести код в режим полного соответствия современному стандарту, нужно указать специальную директиву use strict.

Эта директива не поддерживается IE9-.

Директива use strict

Директива выглядит как строка "use strict"; или 'use strict'; и ставится в начале скрипта.

Например:

"use strict";

// этот код будет работать по современному стандарту ES5
...

```warn header="Отменить действие use strict никак нельзя" Не существует директивы `no use strict` или подобной, которая возвращает в старый режим.

Если уж вошли в современный режим, то это дорога в один конец.


```smart header="`use strict` для функций"
Через некоторое время мы будем проходить [функции](/function-basics). На будущее заметим, что `use strict` также можно указывать в начале функций, тогда строгий режим будет действовать только внутри функции.

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

Нужен ли мне "use strict"?

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

Однако, есть и две проблемы.

Поддержка браузеров IE9-, которые игнорируют "use strict". : Предположим, что мы, используя "use strict", разработали код и протестировали его в браузере Chrome. Всё работает... Однако, вероятность ошибок при этом в IE9- выросла! Он-то всегда работает по старому стандарту, а значит, иногда по-другому. Возникающие ошибки придётся отлаживать уже в IE9-, и это намного менее приятно, нежели в Chrome.

Впрочем, проблема не так страшна. Несовместимостей мало. И если их знать (а в учебнике мы будем останавливаться на них) и писать правильный код, то всё будет в порядке и `"use strict"` станет нашим верным помощником.

Библиотеки, написанные без учёта "use strict". : Некоторые библиотеки, которые написаны без "use strict", не всегда корректно работают, если вызывающий код содержит "use strict".

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

Таких библиотек мало, но при переводе давно существующих проектов на `"use strict"` эта проблема возникает с завидной регулярностью.

Вывод?

Писать код с use strict следует лишь в том случае, если вы уверены, что описанных выше проблем не будет.

Конечно же, весь код, который находится в этом учебнике, корректно работает в режиме "use strict".

ES5-shim [#es5-shim]

Браузер IE8 поддерживает только совсем старую версию стандарта JavaScript, а именно ES3.

К счастью, многие возможности современного стандарта можно добавить в этот браузер, подключив библиотеку ES5 shim, а именно -- скрипты es5-shim.js и es5-sham.js из неё.

Итого

В этой главе мы познакомились с понятием "строгий режим".

Далее мы будем предполагать, что разработка ведётся либо в современном браузере, либо в IE8- с подключённым ES5 shim. Это позволит нам использовать большинство возможностей современного JavaScript во всех браузерах.

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