Strict mode - специальный режим выполнения с более жестким следованием стандартам и измененной в ряде случаев семантикой.
Активируется директивами "use strict"; или 'use strict'; , введенными в начале области видимости (скрипт или функция) до любых других директив.
Особенности режима:
1. Невозможность использования необъявленных переменных (как глобальных, так и внутри функции). Выдает исключение (ReferenceError):
a = 3; // Неправильно
var a = 3; // Правильно
2. Исключение (ReferenceError) при некоторых присваиваниях (раньше просто подавлялось): глобальные переменные только для чтения (типа NaN), присваивание геттеру, присваивание non-extensible объекту).
3. Исключение (SyntaxError) при использовании delete в ряде случаев (удаление переменной, аргумента, функции, свойства с атрибутом configurable = false).
4. Исключение (SyntaxError) при дублировании свойств объекта или параметров функции при определении.
var someObj = { prop1: 10, prop2: 10, prop1: 10; } // Ошибка!
function x(param, param) { return param*param; } // Ошибка!
5. Исключение (SyntaxError) при использовании зарезервированных слов:
implements, interface, package, private, protected, public, static, yield.
6. Исключение (SyntaxError) при использовании восьмеричных чисел:
var testoctal = 001; // Ошибка!
7. Исключение (SyntaxError) при использовании оператора with.
8. Исключение (SyntaxError) при использовании вложенных функций (если они объявляются не в теле функции, а внутри выражения или блока).
9. Исключение (SyntaxError) при использовании eval или arguments в качестве пользовательского идентификатора (переменная или имя функции).
10. Исключение (ReferenceError) при использовании переменной, объявленной внутри блока eval вне этого блока.
11. В strict mode массив arguments содержит копии параметров, переданных функции, поэтому его редактирование не изменяет сами параметры.
function x(param1, param2, param3) {
arguments[0] = 4;
return param1;
}
console.log(x(1,2,3)); // 1 - в обычном режиме, 4 - strict mode.
12. Исключение (ReferenceError) при использовании свойств caller, callee объекта arguments.
13. this не преобразуется в указатель на глобальный объект, если его значение null или undefined.
Для получения ссылки на Global Object можно использовать следующий код, работающий в обоих режимах:
var global = (0, eval)('this');
Комментариев нет :
Отправить комментарий