JavaScript Использовать строгие
"использовать строго"; Определяет, что код JavaScript должен выполняться в "строгом режиме".
Директива "use strict"
Директива "use strict" является новой в JavaScript 1.8.5 (ECMAScript версия 5).
Это не инструкция, а литеральное выражение, игнорируемое более ранними версиями JavaScript.
Цель "использовать строго" означает, что код должен быть выполнен в "строгом режиме".
В строгом режиме вы не можете, например, использовать необъявленные переменные.
Строгий режим поддерживается в:
IE от версии 10. Firefox из версии 4.
Хром из версии 13. Safari от версии 5,1.
Опера от версии 12.
Объявление строгого режима
Строгий режим объявляется путем добавления "use strict"; в начало скрипта или функции.
Объявленный в начале скрипта, он имеет глобальную область видимости (весь код в скрипте будет выполняться в строгом режиме):
Пример
"use strict";
x = 3.14; // This will cause an error
because x is not declared
Пример
"use strict";
myFunction();
function myFunction() {
y = 3.14; // This will also cause an error
because y is not declared
}
Объявленный внутри функции, он имеет локальную область видимости (только код внутри функции находится в строгом режиме):
x = 3.14; // This will not cause an error.
myFunction();
function
myFunction() {
"use strict";
y = 3.14; // This will cause an error
}
"использовать строго"; Синтаксис
Синтаксис для объявления строгого режима был разработан для совместимости со старыми версиями JavaScript.
Компиляция числового литерала (4 + 5;) или строкового литерала ("John Doe";) в программе JavaScript не имеет побочных эффектов. Он просто компилируется в несуществующую переменную и умирает.
Так "использовать строгий"; только вопросы к новым составителям которые «понимают» смысль его.
Почему строгий режим?
Строгий режим облегчает написание "безопасного" JavaScript.
Строгий режим изменяет ранее принятый «плохой синтаксис» в реальные ошибки.
В качестве примера, в обычном JavaScript, опечатка имя переменной создает новую глобальную переменную. В строгом режиме это приведет к ошибке, что сделает невозможным случайное создание глобальной переменной.
В обычном JavaScript разработчик не получает никаких отзывов об ошибках, присвоив значения незаписываемым свойствам.
В строгом режиме любое присваивание незаписываемому свойству, свойству только для чтения, несуществующему свойству, несуществующей переменной или несуществующему объекту приведет к ошибке.
Не допускается в строгом режиме
Использование переменной без ее объявления не допускается:
"use strict";
x = 3.14; // This will cause an error
Объекты также являются переменными.
Использование объекта без его объявления не допускается:
"use strict";
x = {p1:10, p2:20}; // This will cause an error
Удаление переменной (или объекта) не допускается.
"use strict";
var x = 3.14;
delete x; // This
will cause an error
Удаление функции недопустимо.
"use strict";
function x(p1, p2) {};
delete x;
// This will cause an error
Не допускается дублирование имени параметра:
"use strict";
function x(p1, p1) {}; // This will cause an error
Восьмеричной числовые литералы не допускаются:
"use strict";
var x = 010; // This
will cause an error
Восьмеричной escape-символы не допускаются:
"use strict";
var x = "\010"; // This will cause an error
Запись в свойство только для чтения не допускается:
"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14; // This
will cause an error
Запись в свойство только для получения не допускается:
"use strict";
var obj = {get x()
{return 0} };
obj.x = 3.14; // This
will cause an error
Удаление неудаляемого свойства недопустимо:
"use strict";
delete Object.prototype; // This will cause an error
Строка "eval" не может использоваться в качестве переменной:
"use strict";
var eval = 3.14; // This will cause an error
Строка "аргументы" не может использоваться в качестве переменной:
"use strict";
var arguments = 3.14; // This will cause an error
Оператор WITH не допускается:
"use strict";
with (Math){x = cos(2)}; // This will cause an error
По соображениям безопасности eval () не разрешается создавать переменные в области, из которой он был вызван:
"use strict";
eval ("var x = 2");
alert (x); // This
will cause an error
В вызовах функций, таких как f (), это значение было глобальным объектом. В строгом режиме он теперь не определен.
Будущее доказательство!
Ключевые слова, зарезервированные для будущих версий JavaScript, не могут использоваться в качестве имен переменных в строгом режиме.
Это:
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
"use strict";
var public = 1500; // This will cause an error
Осторожно!
Директива "use strict" распознается только в начале скрипта или функции.