Из статьи MDN о строгом режиме:
Во-первых, строгий режим делает невозможным случайное создание глобальных переменных. В обычном JavaScript опечатка переменной в присваивании создает новое свойство глобального объекта и продолжает «работать» (хотя возможен сбой в будущем: скорее всего, в современном JavaScript). Присваивания, которые случайно создали бы глобальные переменные, вместо этого выдают ошибку в строгом режиме:
'use strict'; // Assuming a global variable mistypedVariable exists mistypeVariable = 17; // this line throws a ReferenceError due to the // misspelling of variable
Что это значит? Обнаруживает ли механизм, существует ли уже переменная с таким именем (?!), или строгий режим просто запрещает объявление глобальных переменных за пределами глобальной области видимости?
Приведенная выше цитата, кажется, намекает на первую возможность, но это кажется... странным?
mistypeVariable = 17;
является правильным объявлением. Это было бы в неаккуратном режиме, но в строгом режиме это не создание переменной, поэтому, если у вас уже не былоlet
илиvar
для нее, это ошибка. - person trincot   schedule 20.12.2018mistypeVariable
со значением 17, что почти всегда гораздо менее полезно. (Даже если эта глобальная переменная никогда не встанет у вас на пути, что, вероятно, и не произойдет, вы не узнаете об ошибке до тех пор, пока не попытаетесь выяснить какую-то странную ошибку.) - person Robin Zigmond   schedule 20.12.2018var
,let
илиconst
) в глобальной области видимости. Именно так вы должны их делать в любом случае (если вы вообще должны использовать глобальные переменные). Строгий режим предотвращает случайное создание глобальных переменных из-за использования необъявленных переменных (например, из-за опечатки). - person Robin Zigmond   schedule 20.12.2018let
илиvar
,... Но обратите внимание, в чем заключалась цель фрагмента кода и комментарий: чтобы показать, что в строгом режиме намного легче выявлять орфографические ошибки. - person trincot   schedule 20.12.2018