Здрасьте.
В средневековье JavaScript не имел проблем с обратной совместимостью. В язык добавляли новые функции, а старая функциональность не менялась.
Преимуществом этого было то, что код продолжал работать. А недостатком – любая ошибка или несовершенное решение, принятое созидателями JavaScript, застревали в адском пламени навсегда.
Так было до 2009 года, когда появился ES5 (ECMAScript 5). С ним возникли новые возможности в JS и изменились некоторые существующие. Чтобы старый код работал, бОльшая часть таких модификаций по умолчанию отключены. Их нужно явно включать их с помощью особой директивы: "use strict".
«use strict»
Эта директива выглядит как строка:
"use strict"
или
'use strict'.
Если она находится в начале скрипта, все сценарий работает в «современном» режиме.
Пример:
"use strict";
/* код работает в современном режиме*/
"use strict" можно поставить такжев начале большинства функций. При этом строгий режим включаеься только в конкретной функции. Но как правило, используется его для всего файла.
«use strict» должен находится в начале
"use strict" нужно разместить в первой исполняемой строке скрипта, иначе строгий режим может не включиться.
Например:
alert("халлоу ворлдь");
/* "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»!
Рекомендую всегда ставить строгий режим это спасет от многих проблем в дальнейшей отладке.