"use strict"
делает код JavaScript для запуска в строгом режиме , что в основном означает, что все должно быть определено перед использованием. Основная причина использования строгого режима состоит в том, чтобы избежать случайного глобального использования неопределенных методов.
Также в строгом режиме все работает быстрее, некоторые предупреждения или тихие предупреждения приводят к фатальным ошибкам, лучше всегда использовать его для создания более аккуратного кода.
"use strict"
широко требуется для использования в ECMA5, в ECMA6 по умолчанию является частью JavaScript , поэтому его не нужно добавлять, если вы используете ES6.
Посмотрите на эти утверждения и примеры из MDN:
Директива "использовать строгое"
Директива "использовать строгое" является новой в
JavaScript 1.8.5 (ECMAScript версия 5). Это не утверждение, а
буквальное выражение, игнорируемое более ранними версиями JavaScript.
Цель «использовать строгое» - указать, что код должен быть
выполнен в "строгом режиме". Со строгим режимом нельзя, например,
используйте необъявленные переменные.
Примеры использования «use strict»:
Строгий режим для функций: аналогично, для вызова строгого режима для
функция, поставьте точное утверждение «используйте строгий»; (или «используйте строгий»;) в
тело функции перед любыми другими утверждениями.
1) строгий режим в функциях
function strict() {
// Function-level strict mode syntax
'use strict';
function nested() { return 'And so am I!'; }
return "Hi! I'm a strict mode function! " + nested();
}
function notStrict() { return "I'm not strict."; }
console.log(strict(), notStrict());
2) строгий режим всего сценария
'use strict';
var v = "Hi! I'm a strict mode script!";
console.log(v);
3) Присвоение глобальному незаписываемому элементу
'use strict';
// Assignment to a non-writable global
var undefined = 5; // throws a TypeError
var Infinity = 5; // throws a TypeError
// Assignment to a non-writable property
var obj1 = {};
Object.defineProperty(obj1, 'x', { value: 42, writable: false });
obj1.x = 9; // throws a TypeError
// Assignment to a getter-only property
var obj2 = { get x() { return 17; } };
obj2.x = 5; // throws a TypeError
// Assignment to a new property on a non-extensible object.
var fixed = {};
Object.preventExtensions(fixed);
fixed.newProp = 'ohai'; // throws a TypeError
Вы можете узнать больше на MDN .