Чтобы понять JavaScript, вы должны пройти весь путь до самого начала Интернета. Сегодня веб-браузер вездесущ в Интернете, но так было не всегда. Тим Бернерс-Ли изобрел Всемирную паутину в 1989 году. Она начиналась как средство отправки текстовых веб-страниц через Интернет. Бернерс-Ли написал первый веб-браузер в 1990 году и публично выпустил его в 1991 году.

Первым веб-браузером, получившим массовую популярность, был Mosaic. Выпущенная в 1993 году программа Mosaic была разработана Марком Андриссеном и командой студентов-программистов из Университета Иллинойса. В то время все они работали в NCSA (Национальный центр суперкомпьютерных приложений). После выхода Mosaic быстро взлетел. Это было первое приложение, которое сделало просмотр веб-страниц по-настоящему доступным. Андреессен и его команда были уверены, что это означало престижные предложения вернуться к разработке Mosaic после выпуска. Вместо этого NCSA вернуло себе контроль над проектом и поставило во главе более квалифицированных людей. Марку это не понравилось, и вместо того, чтобы вернуться в NCSA, он решил отправиться на запад, в Силиконовую долину.

Именно здесь Андреессен познакомился с Джимом Кларком. Джим Кларк был легендой Силиконовой долины. Он и несколько аспирантов Стэнфорда основали Silicon Graphics, Inc. SGI была известна как одна из первых компаний, занимающихся компьютерной 3D-графикой. Они отвечали за создание ультрасовременной графики в Парке Юрского периода. Через некоторое время в SGI Джим Кларк решил, что хочет двигаться дальше. Кларк разыскал Андриссена, и вместе они основали Netscape. Андреессен нанял многих инженеров из первоначальной команды Mosaic, а Кларк предоставил взрослому надзору первоначальную финансовую поддержку. Netscape была основана в апреле 1994 года. Их флагманским продуктом был Netscape Navigator — перестроенный браузер, который продолжил первоначальное видение Andreessen для Mosaic. В истинном стиле доткомов они провели IPO всего через 16 месяцев, 9 августа 1995 года. В первый день цена акций была открыта на уровне 28 долларов, а закрыта на уровне 58,25 долларов.

Андриссен считал, что Netscape Navigator нужен язык программирования, чтобы обеспечить больше интерактивных возможностей. Брендан Эйх приступил к работе и за 10 дней разработал первый прототип языка, названный Mocha. Затем название Mocha было изменено на LiveScript, а когда Netscape получила лицензию на товарный знак от Sun Microsystems (создателей Java), название было окончательно изменено на JavaScript. Не путать с Java, которая, за исключением нескольких синтаксических сходств, не имеет ничего общего с JavaScript. В это может быть трудно поверить, но в то время Java считался модным языком программирования, и Netscape думали, что смогут воспользоваться некоторым положительным PR, назвав свой язык JavaScript.

Примерно через год у Microsoft появилась собственная реализация JavaScript под названием JScript. Два конкурирующих языка привели к большей фрагментации экосистемы. Внезапно веб-страницы можно было оптимально просматривать либо в Netscape Navigator, либо в Internet Explorer, но не в обоих одновременно. Благодаря рыночной силе Microsoft IE победил, но до того, как Netscape потерпела крах, они работали с ECMA, чтобы помочь создать стандарт под названием ECMAScript. ECMAScript — это стандарт, на котором построен JavaScript.

В 1999 году ECMA выпустила ECMAScript 3. Это было знаменательным событием в истории Интернета. Теперь у поставщиков браузеров был стандарт, с которым все согласились. Поскольку все поставщики использовали один и тот же стандарт, фрагментация была намного меньше. Теперь веб-страницы можно было одинаково просматривать в любом браузере.

Хотя ECMAScript 3 был выпущен в 1999 году, до выхода следующего настоящего стандарта прошло около 10 лет. От ECMAScript 4 отказались, потому что он был сложным и сломал бы обратную совместимость. В течение этого десятилетия не было никаких инноваций в языке JavaScript/стандарте ECMAScript. Однако инструменты вокруг JavaScript быстро развивались.

В 2005 году Джесси Джеймс Гаррет ввел термин AJAX. AJAX — это сокращение от асинхронного Javascript и XML, и это набор инструментов, созданных Google для выполнения асинхронных запросов к веб-серверу для создания более захватывающих пользовательских интерфейсов. Первым крупным веб-сайтом, использовавшим его, были Google Maps. До AJAX каждый раз, когда возникала потребность в новом HTTP-запросе, приходилось перезагружать всю страницу. Это было катастрофой для пользователей. Такие приложения, как Google Maps, были бы невозможны без AJAX. Представьте себе, что всякий раз, когда вы используете Карты Google, каждый раз, когда вы слишком сильно увеличиваете/уменьшаете масштаб или ищете ресторан, вся страница должна перезагружаться. Продукт будет непригодным. AJAX открыл двери для нового класса веб-приложений.

В 2008 году Google сделал это снова, выпустив движок JavaScript V8. Это принесло огромные улучшения производительности и сделало JavaScript еще более доступным. Используя движок V8, Райан Даль выпустил Node.js в 2009 году. Это впервые убрало JavaScript из браузера и позволило разработчикам запускать код JavaScript на сервере. Благодаря Node.js/V8 стал возможен новый класс серверных фреймворков и других серверных приложений. Впервые разработчики могли свободно использовать JavaScript для всего стека.

После отказа от неудачного ECMAScript 4, наконец, в 2009 году был выпущен ECMAScript 5. В то десятилетие между стандартами JavaScript производительность увеличилась в 100 раз, AJAX позволил получить новый опыт в Интернете, а Node.js создал серверную среду для написания приложений JavaScript. Благодаря значительным улучшениям производительности и новым инструментам JavaScript, наконец, стал языком для выполнения реальной работы.

Сегодня JavaScript — один из самых быстрорастущих языков программирования. ECMA перешла на ежегодный цикл выпуска своего стандарта сценариев. Пока мы говорим, над ECMAScript 8 (он же ES8 или ES2017) в настоящее время ведется работа. По словам Редмонка, который ранжирует языки на основе строк кода в репозиториях GitHub и тегов StackOverflow, JavaScript — это язык программирования номер один. Такие проекты, как Электрон, позволяют таким компаниям, как Slack, создавать кроссплатформенные настольные приложения с помощью знакомых веб-технологий JavaScript, HTML и CSS. Проект React Native даже позволяет создавать нативные мобильные приложения с использованием JavaScript и React.

Вы могли заметить, что история JavaScript полна беспорядков. Язык был разработан за 10 дней. Затем некоторое время существовали конкурирующие версии. На единый стандарт ушло несколько лет. Затем потребовалось десятилетие, чтобы была выпущена следующая версия. Вдобавок ко всему этому ECMAScript всегда был обратно совместим. Одно из правил ECMA — «не ломать сеть». Вот почему в JavaScript нет традиционной схемы версий, которая есть в таких языках, как Python (т. е. 3.5 против 2.7). Причина этого в том, что все обратно совместимо, поэтому нет необходимости в управлении версиями. Обратная совместимость также означает, что любая ошибка в дизайне языка застревает там.

Например, в JavaScript долгое время не было переменных блочного уровня. Это означало, что если вы объявили переменную внутри цикла for или любого оператора блока, то указанная переменная существует вне этого оператора. Таким образом, вы в конечном итоге с такими вещами:

for(var i = 0; i < 10; i++){
  // do nothing
}
console.log(i == 10) // true

В большинстве других языков переменная «i» будет удалена сборщиком мусора после выхода из цикла for, но не в JavaScript. Чтобы изменить это, ES6 добавляет ключевое слово «let»; чтобы разработчики снова могли писать вменяемый код:

for(let i = 0; i < 10; i++){
  // do nothing
}
console.log(i == undefined) // true

Хотя разработчики должны быть благодарны ключевому слову «let» как способу исправления ошибки «var», в языках с управлением версиями правила для «var» могут быть переписаны. Вместо введения нового ключевого слова «let». Но помните, что с ECMAScript вы не можете «сломать сеть». Если бы стандарт для «var» был переписан, это нарушило бы обратную совместимость и сломало бы большую часть кода в сети. Единственный способ исправить это — добавить новую функцию в виде «let».

Самая большая проблема JavaScript заключается в том, что он становится языком программирования со множеством функций. Технически это объектно-ориентированный язык программирования, но долгое время в нем не было классов. Вместо этого разработчикам приходилось объявлять функции и прибегать к передовым методам наследования. Затем ECMA добавляет ключевое слово class для объявления классов, но классы JavaScript по-прежнему имеют свои особенности, поскольку они основаны на модели прототипического наследования языков.

Сейчас становится популярным рассматривать JavaScript как функциональный язык, потому что можно передавать функции в качестве аргументов. Это круто, но теперь разработчики смешивают функциональное программирование с объектно-ориентированным программированием, что может быстро привести к путанице. Вдобавок ко всему этому все свободно типизировано, поэтому переменная может быть числом в одной части кода и строкой в ​​другой. Это приводит к возможным ошибкам времени выполнения, которых нет в строго типизированных языках.

Безумие JavaScript — вот почему в сообществе JavaScript так много библиотек и пакетов. Кажется, есть 10 разных библиотек для решения одной задачи. Также существует острая потребность в вариантах JavaScript. Такие языки, как TypeScript, пытаются решить проблемы, которые есть у JavaScript, позволяя разработчикам писать код, который затем транспилируется в JavaScript, чтобы его можно было запускать в браузере. Есть также CoffeeScript, Elm и Dart и многие другие. Все они являются языками программирования, целью которых является устранение некоторых недостатков JavaScript.

JavaScript — один из самых крутых языков, но сообщество JavaScript полно хаоса. Существует множество конкурирующих фреймворков. Затем в рамках их конкурируют мнения о лучших практиках и способах написания приложений. Иногда это может быть ошеломляющим как для новичков, так и для опытных разработчиков. При этом в сообществе JavaScript происходит много инноваций. Немногие языки имеют такой охват, как JavaScript. JavaScript работает в любом веб-браузере и поэтому имеет встроенную модель распространения с миллиардами пользователей. В конце концов, это то, что вы получаете, когда язык разрабатывается за 10 дней и поддерживает обратную совместимость. Против такого языка, как Clojure. Над чем Рик Хики работал 2,5 года, прежде чем публично выпустить Clojure. Все это говорит о том, что сейчас мало языков с большей динамикой, чем JavaScript. Я думаю, можно с уверенностью сказать, что в ближайшее время JavaScript будет куда угодно, и это язык, с которым должен быть знаком каждый разработчик.