Если JavaScript по умолчанию не является ни асинхронным, ни многопоточным, почему новички обычно считают, что это так (особенно по сравнению с другими языками)?
- Является ли Javascript синхронным (блокирующим) или асинхронным (неблокирующим) по умолчанию
- Является ли JavaScript многопоточным?
Согласно названию этого вопроса... почему JavaScript кажется настолько отличным от Java? Кажется, глагол оперативного, субъективного связывания...
По сути, почему новички часто предполагают, что JavaScript является асинхронным по умолчанию? Какое качество JavaScript заставляет новичков делать это предположение по сравнению с Java, где такое предположение никогда не делается? Это как-то связано с параллелизмом в цикле событий браузера?
2 ответа
Один вопрос выдвинут как "действительно неуместен", поэтому я отвечу на это (и только на это):
По сути, почему новички часто предполагают, что JavaScript является асинхронным по умолчанию? Какое качество JavaScript заставляет новичков делать это предположение по сравнению с Java, где такое предположение никогда не делается?
JavaScript (далее именуемый ECMAScript или ES) преимущественно используется для двух целей:
- веб-сайты (или другие размещенные в браузере) и;
- Node.js.
В обоих этих контекстах базовая инфраструктура хоста существует, чтобы воспользоваться преимуществами поддержки ES для первоклассных функций и замыканий: событий взаимодействия с браузером, setTimeout, AJAX, веб-работников и множества асинхронных средств поддержки в Node.
(Ни функции первого класса, ни замыкания не требуются для асинхронного программирования; они просто делают это "действительно простым" в JavaScript.)
Таким образом, большинство программистов никогда не знают среды, в которой хост не поддерживает нативные конструкции, которые допускают асинхронное программирование; и поддержка асинхронных обратных вызовов используется / требуется для создания большинства программ, представляющих интерес.
Однако, если хост не предоставляет какие-либо асинхронные методы, то "асинхронный по умолчанию" будет показан для дополнения, использующего возможности языка ES:
Выполнение программы ES всегда синхронно (именно поэтому обратный вызов должен выполняться до конца и не может быть прерван), хотя эти крошечные синхронные блоки могут чередоваться.
Java и JavaScript - это два разных языка, и, несмотря на некоторые сходства в синтаксисе и номенклатуре, они разработаны и работают по-разному. (JavaScript является реализацией спецификации ECMAScript в Mozilla, хотя и используется в разговорной речи, как "Xerox" или "Saran Wrap".)
Java поддерживает многопоточность; спецификация JavaScript (ECMAScript) определяет потоки или многопоточность.
JavaScript OO основан на прототипах и методы не связаны; Java основана на сообщениях, и все методы привязаны к объектам.
JavaScript динамически (и вообще слабо) типизирован; Java статически и строго типизирована.
JavaScript интерпретируется в том, что исходный код выполняется напрямую; Java должна быть скомпилирована в первую очередь.