Книга: Выразительный JavaScript
Строгий режим (strict mode)
Строгий режим (strict mode)
JavaScript можно заставить быть построже, переведя его в строгий режим. Для этого наверху файла или тела функции пишется "use strict"
. Пример:
function canYouSpotTheProblem() {
"use strict";
for (counter = 0; counter < 10; counter++)
console.log("Всё будет офигенно");
}
canYouSpotTheProblem();
// ? ReferenceError: counter is not defined
Обычно, когда ты забываешь написать var
перед переменной, как в примере перед counter
, JavaScript по-тихому создаёт глобальную переменную и использует её. В строгом режиме выдаётся ошибка. Это очень удобно. Однако, ошибка не выдаётся, когда глобальная переменная уже существует – только тогда, когда присваивание создаёт новую переменную.
Ещё одно изменение – привязка this
содержит undefined
в тех функциях, которые вызывали не как методы. Когда мы вызываем функцию не в строгом режиме, this
ссылается на объект глобальной области видимости. Поэтому если вы случайно неправильно вызовете метод в строгом режиме, JavaScript выдаст ошибку, если попытается прочесть что-то из this
, а не будет радостно работать с глобальным объектом.
К примеру, рассмотрим код, вызывающий конструктор без ключевого слова new
, в случае чего this
не будет ссылаться на создаваемый объект.
function Person(name) { this.name = name; }
var ferdinand = Person("Евлампий"); // ой-вэй
console.log(name);
// ? Евлампий
Некорректный вызов Person
успешно происходит, но возвращается как undefined
и создаёт глобальную переменную name
. В строгом режиме всё по-другому:
"use strict";
function Person(name) { this.name = name; }
// Опаньки, мы ж забыли 'new'
var ferdinand = Person("Евлампий");
// ? TypeError: Cannot set property 'name' of undefined
Нам сразу сообщают об ошибке. Очень удобно.
Строгий режим умеет ещё кое-что. Он запрещает вызывать функцию с несколькими параметрами с одним и тем же именем, и удаляет некоторые потенциально проблемные свойства языка (например, инструкцию with
, которая настолько ужасна, что даже не обсуждается в этой книге).
Короче говоря, надпись "use strict"
перед текстом программы редко причиняет проблемы, зато помогает вам видеть их.
- Резервное копирование при работе InterBase в режиме 24x7
- 8.5.3. Режимы энергосбережения
- Режим обратной совместимости
- 2.6. Термостабилизация режима каскада на биполярном транзисторе
- 33.1. Интерактивный и неинтерактивный режим работы
- 4. Режимы работы экспертных систем
- 1.1 Режимы ядра и пользователя Windows
- Работа с документами в режиме оффлайн
- Чем отличается спящий режим от ждущего?
- Можно ли при помощи горячих клавиш переводить компьютер в спящий режим?
- Рис. 94. Разрешить использование спящего режима.
- 3.4.1. Смена режима