«Возможно, мы никогда не узнаем, как далеко может зайти этот путь, как многого на самом деле может достичь человек, пока не поймем, что высшая награда — не золотая медаль, а сам путь».
/> ― Джордж Леонард

Привет, мир! Добро пожаловать на мой личный путь к мастерству JS. Эта серия сообщений в блогах представляет собой открытый журнал моего пути к мастерству JS и пониманию тем JS; я пишу эту серию блогов, чтобы поделиться тем, что знаю, а также узнать от вас, читающих это. Я ценю каждого за то, что они нашли время, чтобы прочитать это, задать вопросы, дать отзывы, оставить любые комментарии и поделиться им с другом. Если я сделал какие-либо ошибки, я здесь, чтобы учиться, поэтому, пожалуйста, не стесняйтесь написать пару строк в разделе комментариев.

Как и в цитате Джорджа Леонарда, я понятия не имею, как далеко может зайти путешествие к мастерству JS, когда javascript является javascript, или сколько я действительно могу достичь, но конечной наградой этого путешествия является изучение новых вещей, обмен ими и улучшение моего мастерства.

Мое путешествие начинается с объяснения того, чем является Javascript, а затем переходит к таким темам, как стеки вызовов, контексты выполнения, функции высокого порядка, обратные вызовы, очереди обратных вызовов, цикл событий, асинхронность, объектно-ориентированный javascript, промисы, итераторы, генераторы, Шаблоны проектирования, функциональное программирование и другие темы. Я верю, что открою для себя гораздо больше, когда пройду этот путь, и мне будет чем поделиться.

Начнем наше путешествие

Что такое JavaScript и чем он не является.

JavaScript — это язык программирования, для которого требуется среда для работы (среда выполнения), и эта среда может быть Chrome, IE, Safari, Node.JS или Adobe Acrobat; который любой из них может быть написан с использованием C, C++, C#, Go,…. В отличие от большинства языков программирования, Javascript сам по себе ничто без своего окружения; у него нет понятия ввода или вывода; скорее он предназначен для работы в хост-среде, а среда предоставляет механизм для связи и взаимодействия с внешним миром.

Поэтому при изучении javascript важно определить различные строительные блоки javascript, его экосистему, а также знать границы между ним и окружающей средой.

Хорошим примером для определения различий между JS и его средами является таймер, который предоставляется средами, но не javascript; Различие это важно, если бы таймер был предоставлен javascript с его однопоточным характером, это было бы серьезной проблемой, поскольку подсчет времени является блокирующим действием. Изучение асинхронных операций в JS и того, как они выполняются, тесно связано с пониманием и определением границ javascript и сред, в которых он работает.

Экосистема JavaScript состоит из трех важных частей:

Язык Javascript :

JavaScript — это кроссплатформенный объектно-ориентированный язык сценариев с первоклассными функциями. Это язык на основе прототипов, который является динамическим и поддерживает объектно-ориентированный, императивный и функциональный стили программирования. JavaScript содержит стандартную библиотеку объектов, таких как Array, Date и Math, а также основной набор языковых элементов, таких как операторы, управляющие структуры и операторы. Базовый JavaScript можно расширить для различных целей, дополнив его дополнительными объектами;

JavaScript Engine:

Движок JavaScript — это программа или интерпретатор, который компилирует и выполняет код JavaScript, обрабатывает выделение памяти для объектов и выполняет сборка мусора на объектах, которые ему больше не нужны. У нас есть несколько различных активных движков javascript:

  • Spider Monkey: разработан Mozilla и написан на C && C++.
  • Rhino: разработан Mozilla и написан на Java.
  • Чакра: разработан Microsoft и используется в IE и Microsoft Edge.
  • Ядро Javascript (Nitro): разработано Apple и используется в Safari.
  • Google V8: написан на C++ и используется Chrome , NodeJs .

Большинство движков JS используют компиляцию «Just In Time», которая является гибридом между компиляцией и интерпретацией во время выполнения. В основном это означает, что наш компилятор выполняется во время выполнения, а не делает что-то вроде того, что делает WebPack, когда у нас есть исходный документ, и мы наблюдаем, как WebPack создает другой документ, в котором есть код, который он хочет выплюнуть. Несмотря на это, webPack является транспайлером, а не компилятором, поскольку он не выдает язык более низкого уровня, который обычно является двоичным машинным кодом.

Среда :

Среды Предоставляйте различные API для Javascript, такие как API DOM, API устройств, API связи, API управления данными, таймеры и многое другое. Среды предоставляют JavaScript с API, которые позволяют ему стать javascript на стороне клиента в случае веб-браузеров и javascript на стороне сервера в случае Node.JS. В случае сред на стороне клиента они дают нам API для доступа к DOM и подключения к Интернет и многое другое; в то время как в случае API на стороне сервера они предоставляют доступ к файловой системе, ….

Многоуровневый подход, используемый экосистемой javascript, является одной из причин, которая делает язык javascript мощным. Например, движок javascript V8 используется как клиентской средой (Chrome), так и серверной средой (Node.js). Если завтра появится новая среда, и мы хотим запустить в ней наш код javascript, мы можем принять наши существующие движки или мы можем подключить и запустить новый движок, который также может быть принят текущими средами.

Один поток

Язык программирования – это словарь и набор грамматических правил для указания компьютеру или вычислительному устройству выполнять определенные задачи, при этом сообщая эти словари и грамматики программисту в удобочитаемом виде. форма. Термин язык программирования обычно относится к языкам высокого уровня, и JavaScript является одним из них.

Например, одна из грамматик, предоставляемых JavaScript, заключается в том, что он чувствителен к регистру и использует набор символов Unicode. Другая предоставленная грамматика — это const, которая объявляет именованную константу блочной области, доступную только для чтения. Точно так же JavaScript сделал первоначальное предположение, что код JavaScript выполняется в одном потоке выполнения (т. е. построчно, шаг за шагом, по одному за раз) или выполняется в одном потоке.

Наша спецификация языка JavaScript также делает предположение о том, как должны работать наши движки, и предоставляет дополнительные грамматики с ключевым словом async, которое предполагает, что движок JavaScript предоставит реализацию цикла обработки событий для выполнения кода JS неблокирующим образом.

Подводя итог, можно сказать, что однопоточная природа JavaScript заложена в дизайне языка, а не в движках или средах, в которых он работает. среда может работать в соответствии со спецификацией языка, на котором они написаны.

Резюме :

JavaScript — это просто скрипт, это язык программирования; и ему нужна среда с движком JavaScript для его выполнения и запуска. Все, что мы можем делать с помощью JavaScript, например доступ в Интернет, чтение файла, — все это возможно благодаря средам, в которых он работает, а JavaScript — это просто язык для доступа к этим API. Поэтому, когда люди говорят о JavaScript, обычно речь идет о языке, возможностях движка и среде, в которой он работает.

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