TL;DR
Эта статья не предоставит вам никакой информации о том, как строгий режим ограничивает JavaStrict, здесь я только расскажу, как вы можете избежать проблем, объединяя строгий и нестрогий сценарии вместе.
Как фронтенд-разработчик, который кодирует на JavaScript или его расширенном наборе, TypeScript, я иногда испытываю неуверенность, имея дело с граничным сценарием или сравнивая значение из API-интерфейса серверной части и атрибута DOM. Так что да, именно поэтому я наткнулся на книгу Effective JavaScript, написанную Дэвидом Херманом. Эта книга содержит 68 примеров на JavaScript, включая переменные, функции, объекты, прототипы, параллелизм и т. д.
И сегодня я подытожу то, что узнаю из темы 1 книги.
Строгий режим
Строгий режим — это еще один вариант, который предлагает нам ES5. Он предоставляет разработчикам ограниченную функциональность JavaScript, и сама причина появления этого параметра заключается в том, что JavaScript действительно гибкий, что может сделать беды, а строгий режим отключает часть гибкости, пытаясь уберечь разработчиков от ям.
Вот основные сведения о строгом режиме, которые вам могут понадобиться.
Помимо преимуществ, которые дает нам строгий режим, нам по-прежнему нужно осторожно выбирать, нужно ли нам использовать строгий режим и как мы будем использовать строгий режим. Вот несколько примеров из книги.
Во-первых, строгий режим должен быть написан в начале скрипта или функции, если разработчики поместят оператор «строгий режим» в середине функции, это не сработает. Из-за этого, независимо от того, как вы комбинируете функцию или скрипт вместе, вам нужно, чтобы «строгий режим» находился в верхней части скрипта или функции. Однако также есть вероятность, что вам нужно работать с какой-то библиотекой или скриптом, который не должен работать в среде «строгого режима». И это очень опасно, если вы просто объедините скрипт в «строгом режиме» и «не строгом режиме» вместе. Итак, как мы этого достигаем? В Effective JavaScript Дэвид приводит пример использования JavaScript IIFE, немедленно вызываемого функционального выражения, чтобы поместить их в другую область. (Пример ниже не совсем совпадает с примером из книги.)
т.е.
\\\ Content from file1.js (function(){ 'strict mode' function a(){ ... } })() \\\ Content from file2.js (function(){ function b(){ ... } })()
Таким образом, независимо от того, как вы комбинируете файлы file1.js и file2.js, они будут в нужном им режиме. U может спросить, а что противоположный пример? В приведенном ниже файле file1.js используется строгий режим, а ожидается, что file2.js будет работать в обычном JavaScript. Тогда, если мы просто объединим их последовательно, мы столкнемся с проблемами.
\\\ Content from file1.js 'strict mode' function a(){ ... } \\\ Content from file2.js function b(){ const arguments = []; \\ Error, the name 'arguments' is a preserved variable which can't be assigned in strict mode. }
Кроме того, если мы изменим порядок, «строгий режим» не будет выполняться, потому что оператор «строгий режим» находится в середине скрипта.
\\\ Content from file2.js function b(){ const arguments = []; } \\\ Content from file1.js 'strict mode' \\ Function a is not in strict mode anymore, cuz the above statement 'strict mode' won't be executed. function a(){ ... }
На данный момент вы можете видеть, что строгий режим может вызывать либо весь скрипт, либо отдельные функции, и что не упоминается в моих статьях, так это напротив, он не применяется к блочным операторам в фигурных скобках {}.
Это несколько советов по поводу строгого режима. Пока вы копаетесь в библиотеках, написанных на JavaScript, вы можете заметить, что это утверждение используется часто, и я надеюсь, что теперь вы лучше понимаете, как разработчики работают со «строгим режимом».
Если вам интересно то, что я написал, пожалуйста, следите за обновлениями! В будущем я буду постоянно записывать вещи, которые меня поразили и заслуживают того, чтобы вы потратили 3 минуты на чтение!
Скрестить пальцы!