"use strict"; Определяет , что код JavaScript должен быть выполнен в "строгом режиме".
"use strict" Директива
"use strict" директива является новым в JavaScript 1.8.5 (ECMAScript version 5) .
Это не утверждение, а выражение буквально, игнорируется в более ранних версиях JavaScript.
Цель "use strict" , чтобы указать , что код должен быть выполнен в "строгом режиме".
При строгом режиме, вы не можете, например, использовать необъявленные переменные.
Строгий режим поддерживается в:
IE, начиная с версии 10. Firefox начиная с версии 4.
Chrome , начиная с версии 13. Safari , начиная с версии 5.1.
Opera с версии 12.
Декларирование строгого режима
Строгий режим объявляется добавлением "use strict"; к началу сценария или функции.
Объявленный в начале сценария, он имеет глобальную область видимости (весь код в сценарии будут выполняться в строгом режиме):
пример
"use strict";
myFunction();
function myFunction() {
y = 3.14;
// This will also cause an error (y is not defined)
}
Попробуй сам " Объявленная внутри функции, она имеет локальную область видимости (только код внутри функции находится в строгом режиме):
x = 3.14; // This will not cause an error.
myFunction();
function
myFunction() {
"use strict";
y = 3.14;
// This will cause an error (y is not defined)
}
Попробуй сам " "use strict"; Синтаксис
Синтаксис, для объявления строгого режима, был разработан, чтобы быть совместимым с более старыми версиями JavaScript.
Компиляция числовой литерал (4 + 5;) или строкового литерала ("John Doe";) в программе JavaScript не имеет побочных эффектов. Он просто компилирует к не существующей переменной и умирает.
Так что "use strict" ; только важно для новых компиляторов, которые "понимают" значение этого.
Почему строгого режима?
Строгий режим делает его легче писать "безопасный" JavaScript.
Строгие изменения режима ранее принятые "плохой синтаксис" в реальные ошибки.
В качестве примера, в обычном JavaScript, опечаток имя переменной создает новую глобальную переменную. В строгом режиме, это вызовет ошибку, делая невозможным случайно создать глобальную переменную.
В обычном JavaScript, разработчик не будет получать обратную связь об ошибке присвоения значений не-перезаписываемых свойств.
В строгом режиме, любое присвоение незаписываемый собственности, свойство геттер только, несуществующие собственность, несуществующие переменная или несуществующий объект, будет сгенерировано сообщение об ошибке.
Не разрешено в строгом режиме
Использование переменной, без объявления, не допускается:
"use strict";
x = 3.14; // This
will cause an error (x is not defined)
Объекты являются переменными тоже.
Использование объекта, без объявления, не допускается:
"use strict";
x =
{p1:10, p2:20}; // This
will cause an error (x is not defined)
Удаление переменной (или объект) не допускается.
"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
Эскейп-символы не допускаются:
"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
Запись к свойству Get-только не допускается:
"use strict";
var obj = {get x()
{return 0} };
obj.x = 3.14; // This
will cause an error
Удаление Undeletable свойство не допускается:
"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
С утверждением не допускается:
"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() , то это значение было глобальным объектом. В строгом режиме, теперь не определено.
На будущее!
Будущие зарезервированные ключевые слова не допускаются в строгом режиме. Эти:
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
"use strict";
var public = 1500; // This will cause an error
Осторожно!
Осторожно!
"use strict" директива признается только в начале сценария или функции.