use strick
'use strick' - ключевые слова которые включают "строгий режим". Это особенность спецификации ES5, которая накладывает ряд ограничений на языковые конструкции, тем самым исключая некоторые подводные камни и предовращая ошибки. В этом режиме выкидывается больше исключений, как правило с более подробным описание ошибки.
Если вы включили строгий режим, то его больше нельзя выключить
Строгий режим можно включить как на весь файл, так и на отдельную функцию:
function test(){
'use strick'
... // хорошая практика, используемая в написании своих библиотек
}
Это удобно применять если мы пишем свою библиотеку, и не хотим испортить код который будет использовать её.
Нужно также помнить что при объединении файл с использованием strick с файлом non-strick = в результате мы получим файл с 'use strick'.
Опасный код, который блокирует strick
Объявление переменных без ключевых слов var, let, const:
unknownVariable = 17; // throws a ReferenceError
Если попытаться присвоить NaN переменной. Если попытаться удалить неудаляемые свойства:
'use strick'
delete Object.prototype; //TypeError
Строгий редим требует чтобы свойства объекта имели уникальные имена:
'use strict';
var o = { p: 1, p: 2 }; // !!! syntax error
Аналогично, параметры, передоваемые в функцию:
function sum(a, a, c) // !!! syntax error
{
...
}
Еще одно отличие строго режима от нестрогого, заключается в том, что при передачи this в строгом режиме в функцию с помощью методов call, apply, bind - это значение не оборачивается в объект. В нестрогом режиме, если передается строка, число и логическая переменная - то она оборачивается в String, Number, Boolean. Если передается null или undefined - объект this становится глобальным. В строгом режиме значение this передается "как есть".
function test(){ return this; };
test() === undefined // false
test.call(2) === 2 //false
test.apply(null) === null //false
test.call(undefined) === undefined //false
test.bind(true) === true //false
//так как все переменные оборачиваются в объект
'use strick'
test() === undefined //true
test.call(2) === 2 //true
test.apply(null) === null //true
test.call(undefined) === undefined // true
test.bind(true) === true //true
В результате, при использовании строгого режима мы сознательно ограничеваем себя от возможных ошибок, связаных с невнимательностью, неаккуратным использованием определенных конструкций.
Материал взят из GetInstance - use strick