В последнее время , я побежал некоторые из моего кода JavaScript через Крокфорд в JSLint , и он дал следующее сообщение об ошибке:
Проблема в строке 1, символ 1: отсутствует выражение «использовать строгий».
Сделав поиск, я понял, что некоторые люди добавляют "use strict";
в свой код JavaScript. Как только я добавил заявление, ошибка перестала появляться. К сожалению, Google не раскрыл большую часть истории этого строкового утверждения. Конечно, это как-то связано с тем, как браузер интерпретирует JavaScript, но я понятия не имею, каков будет эффект.
Так что же это такое "use strict";
, что это означает и все еще актуально?
Кто-нибудь из текущих браузеров отвечает на "use strict";
строку или это для будущего использования?
javascript
syntax
jslint
use-strict
Марк Роджерс
источник
источник
"use strict";
одного не делает JS лексически ограниченным. Объявление переменных сlet
иconst
должно использоваться тоже.Ответы:
Эта статья о строгом режиме Javascript может вас заинтересовать: Джон Резиг - ECMAScript 5 Strict Mode, JSON и другие
Процитирую некоторые интересные части:
А также:
Также обратите внимание, что вы можете применить «строгий режим» ко всему файлу ... Или вы можете использовать его только для определенной функции (все еще цитируя статью Джона Резига) :
Что может быть полезно, если вам нужно смешать старый и новый код ;-)
Итак, я полагаю, что это немного похоже на
"use strict"
то, что вы можете использовать в Perl (отсюда и название?) : Оно помогает вам делать меньше ошибок, обнаруживая больше вещей, которые могут привести к поломкам.Строгий режим теперь поддерживается всеми основными браузерами .
Внутри собственных модулей ECMAScript (с операторами
import
andexport
) и классов ES6 строгий режим всегда включен и не может быть отключен.источник
"use strict"
в Firefox 3.6, Safari 5, Chrome 7 и Opera 10.6 (все Mac). Никаких ошибок, поэтому, я думаю, «использовать строгий» пока не поддерживается ни в одном браузере. Хотя не проверял в IE9;)Это новая особенность ECMAScript 5. Джон Резиг написал хорошее резюме этого.
Это просто строка, которую вы помещаете в свои файлы JavaScript (либо вверху вашего файла, либо внутри функции), которая выглядит следующим образом:
Размещение его в вашем коде сейчас не должно вызывать никаких проблем с текущими браузерами, так как это всего лишь строка. Это может вызвать проблемы с вашим кодом в будущем, если ваш код нарушает прагму. Например, если у вас в данный момент нет
foo = "bar"
определенияfoo
сначала, ваш код начнет давать сбой ... что на мой взгляд хорошо.источник
<script>"use strict";
. Флаг применяется только к блоку, в который он включен.'use strict';
вместо"use strict";
, это не удастся вместо. Это имеет больше смысла, потому что если он добавляет его к глобальному объекту, это означает, что он может не сработать в следующий раз, когда вы запустите функцию / сделаете что-то еще, что сбрасывает блок, как это будет в самом высоком блоке (глобальном).Эта инструкция
"use strict";
указывает браузеру использовать строгий режим, который представляет собой сокращенный и безопасный набор функций JavaScript.Список функций (не исчерпывающий)
Запрещает глобальные переменные. (Ловит пропущенные
var
объявления и опечатки в именах переменных)Тихие неудачные задания приведут к ошибке в строгом режиме (назначение
NaN = 5;
)Попытки удалить неустранимые свойства бросят (
delete Object.prototype
)Требует, чтобы все имена свойств в литерале объекта были уникальными (
var x = {x1: "1", x1: "2"}
)Имена параметров функции должны быть уникальными (
function sum (x, x) {...}
)Запрещает восьмеричный синтаксис (
var x = 023;
некоторые разработчики ошибочно предполагают, что предыдущий ноль не меняет число.)Запрещает
with
ключевое словоeval
в строгом режиме не вводит новые переменныеЗапрещает удаление простых имен (
delete x;
)Запрещает привязку или присвоение имен
eval
иarguments
в любой формеСтрогий режим не связывает свойства
arguments
объекта с формальными параметрами. (то есть вfunction sum (a,b) { return arguments[0] + b;}
этом работает, потому чтоarguments[0]
связан сa
и так далее.)arguments.callee
не поддерживается[Ссылка: строгий режим , Сеть разработчиков Mozilla ]
источник
window.foo = bar
).Если люди беспокоятся об использовании,
use strict
возможно, стоит проверить эту статью:ECMAScript 5 «Строгий режим» поддержка в браузерах. Что это значит?
NovoGeek.com - блог Кришны
В нем рассказывается о поддержке браузеров, но, что более важно, о том, как безопасно с ней обращаться:
источник
window
this
которым вы не можете нацеливатьсяwindow
?this
принадлежит своей функции, а не глобальному окнуthis
действительно естьundefined
.Осторожно, всем вам, программистам с высокой нагрузкой: применение
"use strict"
к существующему коду может быть опасным! Это не какая-то приятная на ощупь наклейка с счастливым лицом, которую вы можете нанести на код, чтобы сделать его «лучше». С"use strict"
прагмой, браузер внезапно будет БРОСАТЬ исключения в случайных местах, которые он никогда не генерировал раньше, просто потому, что в этот момент вы делаете что-то, что по умолчанию / свободный JavaScript разрешает, но строгий JavaScript не терпит! У вас могут быть нарушения строгости, скрывающие редко используемые вызовы в вашем коде, которые будут вызывать исключение, только когда они в конечном счете запускаются - скажем, в производственной среде, которую используют ваши платящие клиенты!Если вы собираетесь сделать решающий шаг, это хорошая идея применять
"use strict"
наряду с комплексными модульными тестами и строго настроенной задачей сборки JSHint, которая даст вам некоторую уверенность в том, что в вашем модуле нет темного угла, который ужасно взорвется только потому, что вы включил строгий режим. Или, эй, вот еще один вариант: просто не добавляйте"use strict"
ни один из ваших устаревших кодов, это, честно говоря, возможно, безопаснее. Определенно НЕ добавляйте"use strict"
ни к каким модулям, которыми вы не владеете или не обслуживаете, например, к сторонним модулям.Я думаю, что хотя это смертельно опасное животное, оно
"use strict"
может быть хорошим, но вы должны делать это правильно. Лучшее время для строгой оценки - это когда ваш проект находится на пустом месте, и вы начинаете с нуля. СконфигурируйтеJSHint/JSLint
все предупреждения и параметры, как можно теснее, чтобы ваша команда смогла справиться с этим, получите хорошую систему сборки / тестирования / утверждения в виде фальшивых настроекGrunt+Karma+Chai
, и только ТОГДА начните отмечать все ваши новые модули как"use strict"
. Будьте готовы вылечить множество ошибок и предупреждений. Убедитесь, что все понимают серьезность, настроив сборку на FAIL, еслиJSHint/JSLint
выдает какие-либо нарушения.Мой проект не был новым проектом, когда я его принял
"use strict"
. В результате моя среда IDE заполнена красными метками, потому что у меня нет"use strict"
половины моих модулей, и JSHint жалуется на это. Это напоминание мне о том, что рефакторинг я должен делать в будущем. Моя цель - освободиться от красной метки из-за всех моих пропущенных"use strict"
утверждений, но сейчас уже много лет.источник
"use strict";
в существующий код. При этом я почти всегда буду использовать его, когда пишу новый код с нуляИспользование
'use strict';
не делает ваш код лучше.Строгий режим JavaScript особенность в ECMAScript 5 . Вы можете включить строгий режим, объявив это в верхней части вашего скрипта / функции.
Когда механизм JavaScript видит эту директиву , он начинает интерпретировать код в специальном режиме. В этом режиме появляются ошибки, когда обнаруживаются определенные методы кодирования, которые могут оказаться потенциальными ошибками (что является причиной строгого режима).
Рассмотрим этот пример:
В своем стремлении выстроить числовые литералы разработчик непреднамеренно инициализировал переменную
b
с восьмеричным литералом. Нестрогий режим интерпретирует это как числовой литерал со значением24
(в базе 10). Однако строгий режим выдаст ошибку.Неисчерпывающий список специальностей в строгом режиме см. В этом ответе .
Где я должен использовать
'use strict';
?В моем новом приложении JavaScript: Абсолютно! Строгий режим может использоваться в качестве информатора, когда вы делаете что-то глупое с вашим кодом.
В моем существующем коде JavaScript: вероятно, нет! Если в вашем существующем коде JavaScript есть операторы, которые запрещены в строгом режиме, приложение просто сломается. Если вы хотите строгий режим, вы должны быть готовы к отладке и исправлению существующего кода. Вот почему использование
'use strict';
не делает ваш код лучше .Как использовать строгий режим?
Вставьте
'use strict';
оператор поверх вашего скрипта:Обратите внимание, что все в файле
myscript.js
будет интерпретироваться в строгом режиме.Или вставьте
'use strict';
оператор поверх тела вашей функции:Все в лексическом объеме функции
doSomething
будет интерпретироваться в строгом режиме. Слово лексическая сфера важна здесь. Например, если ваш строгий код вызывает функцию библиотеки, которая не является строгой , в строгом режиме выполняется только ваш код, а не вызываемая функция. Смотрите этот ответ для лучшего объяснения.Какие вещи запрещены в строгом режиме?
Я нашел хорошую статью, описывающую несколько вещей, которые запрещены в строгом режиме (обратите внимание, что это не эксклюзивный список):
Зарезервированные слова для будущих версий JavaScript
ECMAScript 5 добавляет список зарезервированных слов. Если вы используете их в качестве переменных или аргументов, строгий режим выдаст ошибку. Зарезервированные слова:
Дальнейшее чтение
источник
'use strict'
директивы, они будут выполняться в нестрогом режиме, даже если они вызваны из функции, работающей в строгом режиме. Смотрите этот ответ для объяснения.this
). Теперь я вижу, что вы имели в виду вызов других функций.Я настоятельно рекомендую каждому разработчику начать использовать строгий режим сейчас. Существует достаточно браузеров, поддерживающих его, поэтому строгий режим на законных основаниях поможет нам уберечь нас от ошибок, которые мы даже не подозревали в вашем коде.
По-видимому, на начальном этапе будут ошибки, с которыми мы никогда не сталкивались. Чтобы получить максимальную выгоду, мы должны провести надлежащее тестирование после перехода в строгий режим, чтобы убедиться, что мы все поймали. Определенно, мы не просто добавляем
use strict
наш код и предполагаем, что ошибок нет. Таким образом, проблема в том, что пришло время начать использовать эту невероятно полезную языковую функцию для написания лучшего кода.Например,
JSLint - это отладчик, написанный Дугласом Крокфордом. Просто вставьте ваш скрипт, и он быстро отыщет любые заметные проблемы и ошибки в вашем коде.
источник
Я хотел бы предложить несколько более обоснованный ответ, дополняющий другие ответы. Я надеялся отредактировать самый популярный ответ, но не смог. Я постарался сделать его как можно более полным и полным.
Вы можете обратиться к документации MDN для получения дополнительной информации.
"use strict"
Директива введена в ECMAScript 5.Директивы похожи на заявления, но отличаются.
use strict
не содержит ключевых слов: директива представляет собой простое выражение выражения, которое состоит из специального строкового литерала (в одинарных или двойных кавычках). Механизмы JavaScript, которые не реализуют ECMAScript 5, просто видят выражение-выражение без побочных эффектов. Ожидается, что будущие версии стандартов ECMAScript будут представленыuse
как реальное ключевое слово; таким образом, цитаты устаревают.use strict
может использоваться только в начале скрипта или функции, то есть он должен предшествовать любому другому (реальному) утверждению. Это не обязательно должна быть первая инструкция в скрипте функции: ей могут предшествовать другие операторные выражения, которые состоят из строковых литералов (и реализации JavaScript могут рассматривать их как директивы, специфичные для реализации). Операторы строковых литералов, которые следуют за первым реальным оператором (в скрипте или функции), являются простыми операторами выражения. Переводчики не должны интерпретировать их как директивы, и они не имеют никакого эффекта.use strict
Директива указывает , что следующий код (в сценарии или функции) строгий код. Код на самом высоком уровне сценария (код, который отсутствует в функции) считается строгим кодом, когда сценарий содержитuse strict
директиву. Содержимое функции считается строгим кодом, если сама функция определена в строгом коде или когда функция содержитuse strict
директиву. Код, который передаетсяeval()
методу, считается строгим кодом, когда вызываетсяeval()
из строгого кода или содержитuse strict
саму директиву.Строгий режим ECMAScript 5 является ограниченным подмножеством языка JavaScript, что устраняет соответствующие недостатки языка и обеспечивает более строгую проверку ошибок и более высокий уровень безопасности. Ниже перечислены различия между строгим режимом и обычным режимом (из которых первые три особенно важны):
with
-statement в строгом режиме.Object
, то вы получите aReferenceError
. В обычном режиме идентификатор неявно объявляется как глобальная переменная (как свойство глобальнойObject
)this
имеет значениеundefined
в функциях, которые вызывались как функции (а не как методы). (В обычном режимеthis
всегда указывает на глобальныйObject
). Это различие можно использовать для проверки, поддерживает ли реализация строгий режим:Кроме того, когда функция вызывается в строгом режиме
call()
илиapply
в строгом режиме,this
это точно значение первого аргумента вызоваcall()
orapply()
. (В нормальном режимеnull
иundefined
заменяются глобальнойObject
и значениями, которые не являются объектами, отлиты в объекты.)В строгом режиме вы получите
TypeError
, когда вы попытаетесь присвоить только для чтения свойства или определить новые свойства для нерасширяемого объекта. (В обычном режиме оба просто терпят неудачу без сообщения об ошибке.)eval()
вы не можете объявлять или определять переменные или функции в области действия вызывающей стороны (как вы можете сделать это в обычном режиме). Вместо этого создается новая область действия,eval()
а переменные и функции находятся в этой области. Эта область уничтожается послеeval()
завершения выполнения.SyntaxError
когда заdelete
оператором следует неквалифицированный идентификатор (переменная, функция или параметр функции). В обычном режимеdelete
выражение ничего не делает и оценивается какfalse
.TypeError
когда вы попытаетесь удалить не настраиваемое свойство. (В обычном режиме попытка просто терпит неудачу, иdelete
выражение оценивается какfalse
).0x
. (В нормальном режиме некоторые реализации допускают восьмеричные литералы.)eval
иarguments
обрабатываются как ключевые слова. Вы не можете изменить их значение, не можете присвоить им значение и не можете использовать их в качестве имен для переменных, функций, параметров функций или идентификаторов блока catch.arguments.caller
иarguments.callee
вызватьTypeError
функцию в строгом режиме. Кроме того, некоторые свойства вызывающего и аргумента функций в строгом режиме вызывают,TypeError
когда вы пытаетесь их прочитать.источник
0
.Мои два цента:
Одна из целей строгого режима - обеспечить более быструю отладку проблем. Это помогает разработчикам, создавая исключения, когда происходят определенные неправильные вещи, которые могут вызвать тихое и странное поведение вашей веб-страницы. Момент мы используем
use strict
код, он выдает ошибки, которые помогают разработчику заранее исправить это.Несколько важных вещей, которые я узнал после использования
use strict
:Предотвращает объявление глобальной переменной:
Теперь этот код создается
nameoftree
в глобальной области видимости, к которой можно получить доступ с помощьюwindow.nameoftree
. Когда мы реализуемuse strict
код будет выдавать ошибку.Sample
Исключает
with
утверждение:with
операторы не могут быть уменьшены с помощью таких инструментов, как uglify-js . Они также устарели и удалены из будущих версий JavaScript.Sample
Предотвращает дубликаты:
Когда у нас есть повторяющееся свойство, оно выдает исключение
Их немного, но мне нужно больше узнать об этом.
источник
Если вы используете браузер, выпущенный в прошлом году или около того, то, скорее всего, он поддерживает строгий режим JavaScript. Только старые браузеры до того, как ECMAScript 5 стал текущим стандартом, не поддерживают его.
Кавычки вокруг команды гарантируют, что код будет по-прежнему работать и в старых браузерах (хотя вещи, которые генерируют синтаксическую ошибку в строгом режиме, как правило, просто приводят к сбоям в работе сценария, что трудно обнаружить в старых браузерах).
источник
При добавлении
"use strict";
следующие случаи будут выдавать SyntaxError перед выполнением сценария:Прокладывая путь для версий будущего ECMAScript , используя один из недавно зарезервированных ключевых слов (в предвидении для ECMAScript 6 ):
implements
,interface
,let
,package
,private
,protected
,public
,static
, иyield
.Объявление функции в блоках
Восьмеричный синтаксис
this
указать на глобальный объект.Объявление дважды одинакового имени для имени свойства в литерале объекта
Это больше не относится к ECMAScript 6 ( ошибка 1041128 ).
Объявление двух аргументов функции с одинаковым именем функции
Установка значения в необъявленную переменную
Использование
delete
по имени переменнойdelete myVariable;
Использование
eval
или вarguments
качестве имени переменной или аргумента функцииИсточники:
Переход на строгий режим на MDN
Строгий режим на MDN
Строгий режим JavaScript и почему вы должны его использовать в блоге Колина Дж. Ирига (архивная версия)
источник
Строгий режим вносит несколько изменений в обычную семантику JavaScript:
устраняет некоторые тихие ошибки JavaScript, изменяя их на ошибки.
исправляет ошибки, мешающие движкам JavaScript выполнять оптимизацию.
запрещает некоторый синтаксис, который может быть определен в будущих версиях ECMAScript.
для получения дополнительной информации vistit строгий режим - Javascript
источник
«Строгое использование»; является гарантией того, что программист не будет использовать плохие или плохие свойства JavaScript. Это руководство, так же, как правитель поможет вам сделать прямые линии. «Use Strict» поможет вам сделать «прямое кодирование».
Те, кто предпочитает не использовать линейки для прямой обработки строк, обычно оказываются на тех страницах, где просят других отладить их код.
Поверь мне. Издержки незначительны по сравнению с плохо разработанным кодом. У Дуга Крокфорда, который несколько лет был старшим разработчиком JavaScript, есть очень интересный пост . Лично мне нравится все время возвращаться на его сайт, чтобы не забыть свою хорошую практику.
Современная практика JavaScript всегда должна вызывать «Use Strict»; Прагма. Единственная причина, по которой группа ECMA сделала необязательный режим «Строгий», заключается в том, чтобы предоставить менее опытным кодировщикам доступ к JavaScript и дать время для адаптации к новым и более безопасным методам кодирования.
источник
Включение
use strict
в начало всех ваших чувствительных файлов JavaScript с этой точки зрения является небольшим способом стать лучшим программистом JavaScript и избежать случайного изменения глобальных переменных и изменений в молчании.источник
Цитирование из w3schools :
Пожалуйста, обратитесь к http://www.w3schools.com/js/js_strict.asp, чтобы узнать больше
источник
"use strict"
заставляет код JavaScript работать в строгом режиме , что в основном означает, что все должно быть определено перед использованием. Основная причина использования строгого режима состоит в том, чтобы избежать случайного глобального использования неопределенных методов.Также в строгом режиме все работает быстрее, некоторые предупреждения или тихие предупреждения приводят к фатальным ошибкам, лучше всегда использовать его для создания более аккуратного кода.
"use strict"
широко используется в ECMA5, в ECMA6 по умолчанию он является частью JavaScript , поэтому его не нужно добавлять, если вы используете ES6.Посмотрите на эти заявления и примеры из MDN:
1) строгий режим в функциях
2) строгий режим всего сценария
3) Присвоение неписываемым глобальным
Вы можете прочитать больше на MDN .
источник
Некоторые люди, которые были в комитете ECMAScript, говорили о том, как меняется JavaScript, часть 1: ECMAScript 5, о том, как постепенно использовать
"use strict"
переключателя позволяет разработчикам JavaScript очищать многие опасные функции JavaScript без внезапного взлома каждого веб-сайта. в мире.Разумеется, в нем также говорится о том, чем являются (были) многие из этих ошибок, и как ECMAScript 5 их исправляет.
источник
Небольшие примеры для сравнения:
Нестрогий режим:
Строгий режим:
Нестрогий режим:
источник
this === 'a'
в обоих примерах?Обратите внимание, что
use strict
был введен в EcmaScript 5 и сохранился с тех пор.Ниже приведены условия для запуска строгого режима в ES6 и ES7 :
источник
Основные причины, по которым разработчики должны использовать
"use strict"
это:Предотвращает случайное объявление глобальных переменных. Использование
"use strict()"
гарантирует, что переменные объявленыvar
перед использованием. Например:"use strict"
Директива распознается только в начале скрипта или функции.Строка
"arguments"
не может быть использована в качестве переменной:Ограничит использование ключевых слов в качестве переменных. Попытка использовать их приведет к ошибкам.
Короче говоря, ваш код будет менее подвержен ошибкам и, в свою очередь, заставит вас писать хороший код.
Чтобы узнать больше об этом вы можете обратиться сюда .
источник
«использовать строгое»; является попыткой ECMA сделать JavaScript немного более надежным. Это привносит в JS попытку сделать его хотя бы немного «строгим» (другие языки применяют строгие правила с 90-х годов). Это на самом деле «заставляет» разработчиков JavaScript следовать некоторым рекомендациям по кодированию. Тем не менее, JavaScript очень хрупкий. Не существует таких вещей, как типизированные переменные, типизированные методы и т. Д. Я настоятельно рекомендую разработчикам JavaScript изучать более надежный язык, такой как Java или ActionScript3, и применять те же самые лучшие практики в своем коде JavaScript, это будет работать лучше и легче отладки.
источник
«Строгий» режим JavaScript был введен в ECMAScript 5.
Запись
"use strict";
в самом верху вашего файла JS включает строгую проверку синтаксиса. Он выполняет следующие задачи для нас:показывает ошибку, если вы пытаетесь присвоить необъявленную переменную
останавливает перезапись ключевых системных библиотек JS
запрещает некоторые небезопасные или подверженные ошибкам языковые функции
use strict
также работает внутри отдельных функций. Всегда лучше включатьuse strict
в свой код.Проблема совместимости браузера: директивы use предназначены для обратной совместимости. Браузеры, которые их не поддерживают, просто увидят строковый литерал, на который больше нет ссылок. Итак, они пройдут над ним и пойдут дальше.
источник
use strict
это способ сделать ваш код более безопасным, потому что вы не можете использовать опасные функции, которые могут работать не так, как вы ожидаете. И, как было написано ранее, это делает код более строгим.источник
Use Strict используется для отображения распространенных и повторяющихся ошибок, так что он обрабатывается по-разному и изменяет способ выполнения сценария Java, такие изменения:
Предотвращает случайные глобалы
Без дубликатов
Устраняет с
Устраняет это принуждение
Более безопасный eval ()
Ошибки для неизменяемых
Вы также можете прочитать эту статью для деталей
источник
Обычно JavaScript не следует строгим правилам, что увеличивает вероятность ошибок. После использования
"use strict"
код JavaScript должен следовать строгому набору правил, как и в других языках программирования, таких как использование терминаторов, объявление перед инициализацией и т. Д.Если
"use strict"
используется, код должен быть написан в соответствии со строгим набором правил, следовательно, уменьшается вероятность ошибок и неясностей.источник
«использовать строгое»; Определяет, что код JavaScript должен выполняться в «строгом режиме».
Все современные браузеры поддерживают «строгое использование», кроме Internet Explorer 9 и ниже .
Недостаток
Если разработчик использовал библиотеку, которая была в строгом режиме, но разработчик привык работать в обычном режиме, они могли бы вызвать некоторые действия с библиотекой, которые не работали бы так, как ожидалось.
Хуже того, поскольку разработчик находится в обычном режиме, он не имеет преимуществ, связанных с дополнительными ошибками, поэтому ошибка может молча завершиться сбоем.
Кроме того, как указано выше, строгий режим не позволяет вам делать определенные вещи.
Люди обычно думают, что вы не должны использовать эти вещи в первую очередь, но некоторым разработчикам не нравятся ограничения, и они хотят использовать все возможности языка.
Для базового примера и для справки:
https://www.tutorialsteacher.com/javascript/javascript-strict
источник
Строгий режим может предотвратить утечки памяти.
Пожалуйста, проверьте функцию ниже, написанную в нестрогом режиме:
В этой функции мы используем переменную
name
внутри функции. Внутренне компилятор сначала проверит, существует ли какая-либо переменная, объявленная с этим конкретным именем в этой конкретной области действия функции. Поскольку компилятор понял, что такой переменной нет, он проверит внешнюю область видимости. В нашем случае это глобальный охват. Опять же, компилятор понял, что в глобальном пространстве с таким именем также не объявлена переменная, поэтому он создает такую переменную для нас в глобальном пространстве. Концептуально эта переменная будет создана в глобальной области и будет доступна во всем приложении.Другой сценарий состоит в том, что, скажем, переменная объявлена в дочерней функции. В этом случае компилятор проверяет допустимость этой переменной во внешней области видимости, то есть в родительской функции. Только тогда он проверит глобальное пространство и создаст для нас переменную. Это означает, что необходимо выполнить дополнительные проверки. Это повлияет на производительность приложения.
Теперь давайте напишем ту же функцию в строгом режиме.
Мы получим следующую ошибку.
Здесь компилятор выдает ошибку ссылки. В строгом режиме компилятор не позволяет нам использовать переменную без ее объявления. Таким образом, утечки памяти могут быть предотвращены. Кроме того, мы можем написать более оптимизированный код.
источник