Как строгий режим "use strict" в JavaScript может сэкономить вам пару часов

Строгий режим (директива "use strict") — очень хорошее явление в JavaScript и начать с ним работать очень просто!

Как его применить

// file.js
"use strict"
function doStuff(){
	// строгий режим активирован
}

В описанном выше примере строгий режим применяется по всему коду в файле file.js.

Если вы хотите подключить его только внутри функции, используйте следующий пример:

// file.js
function a(){
    "use strict";
    // строгий режим активирован только для кода внутри функции
    function nestedFunction(){
		// и будет также применяться внутри вложенной функции
	}
}

Преимущества

Продублированные ключи в объекте

var zombie = {
    eyeLeft : 0,
    eyeRight: 1,
    // … много ключей …
    eyeLeft : 1
}

В результате мы получим ошибку, так как ключ eyeLeft встречается дважды. В данном случае строгий режим спасёт вас от дублирования ключа в объекте.

Переменные без var

plane = 5;

Наверняка вы уже знаете, какие проблемы могут возникнуть, если забыть добавить ключевое слово var в объявлении переменной. Если нет, то знайте, что отлаживать потом такой код потом весьма затруднительно, ведь подобная переменная будет объявлена в глобальном контексте и может изменяться другими частями программы.

Только представьте переменную i, объявленную глобально. Это может внести беспорядок во все вложенные циклы в приложении.

Продублированные аргументы

function run(fromWhom, fromWhom){}

Обратите внимание что аргумент fromWhom прописан дважды, для данного случая в строгом режиме также будет выводиться ошибка

Чем чревата подобная ошибка:

function run(fromWhom, fromWhom){alert(fromWhom)}
run(1, 2);
// alert: 2

Фиксация arguments внутри функции

var run = function(fromWhom){
    arguments[0] = 'alien';
    alert(fromWhom);
}
run('zombie');
// alert: 'alien';

Если использовать строгий режим:

var run = function(fromWhom){
    "use strict";
    arguments[0] = 'alien';
    alert(fromWhom);
}
run('zombie');
// alert: 'zombie';

Насколько неочевидным является то, что при изменении аргументов (arguments[0] = 'alien') изменяется именованный аргумент fromWhom? Директива "use strict" спасёт вас из этого затруднительного положения.

WoollyMittens, пользователь reddit в комментариях предложил:

Вместе со строгим режимом можно установить “linter” (http://www.jshint.com/), что бы избежать глупых ошибок даже до запуска кода. Для большинства редакторов есть соответствующий плагин. Вы можете считать это теми самыми красными волнистыми линиями, которыми подчеркиваются ваши грамматические ошибки, когда вы пишете email, но применительно к коду.

Скоро я поясню как можно это все автоматизировать с помощью grunt.

loz220, пользователь reddit в комментариях предложил:

Неплохой обзор. Посмотреть полный список того, что делает “use strict”, можно здесь.

Материалы для дальнейшего изучения