Как стать автором
Обновить

JavaScript-движки: как они работают? От стека вызовов до промисов — (почти) всё, что вам нужно знать

Время на прочтение14 мин
Количество просмотров61K
Всего голосов 73: ↑68 и ↓5+63
Комментарии16

Комментарии 16

никто не читает теги

Кое-кто все таки читает)

Теперь все читают теги)
НЛО прилетело и опубликовало эту надпись здесь
Супер! Давно хотел почитать как коллбэки внутри устроены.

Ох уж эта мода на броские заголовки! Это ВСЁ что мне нужно знать? Почти все? Я вас умоляю, это дешевый обзор "по верхам" самого начального уровня! Как вводное слово — сойдет, но если это "все что нужно знать" чтобы писать на Ноде, то мне жаль мир javascript. Он скатывается в уровень хоумпейджей на PHP и "загрузок из excel" для 1С

Вот да, ждал упоминания (хотя бы) других движков, вроде того же nashorn'a, внутренних особенностей, типа тротлинга, корса, работы с памятью, файловой системой и кодом окружения.


Заголовок не оправданными ожиданий.

Зачем вам if (true) { в примерах? Читабельности не прибавляет.

Ужасная статья. Ни черта не понятно, говорим про es6 но не используем современный синтаксис. В корне не верные утверждения:
Один из самых полезных — Promise.all, он берёт массив из промисов и возвращает один промис. Только проблема в том, что Promise.all отклоняется, если отклонены все промисы в массиве.

Хотя в документации сказано как раз об обратном:
Если одно из переданных обещаний будет отклонено, Promise.all будет немедлено отклонен со значением отклоненного обещания, не учитывая другие обещания, независимо выполнены они или нет.

developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Promise/all
тут неточность перевода. В оригинале " The problem is that Promise.all rejects if any Promise in the array is rejected."
Вы правы. В оригинале ошибки нет.
Это самое первое что бросилось в глаза. Явная ошибка
> В реальном мире нам не нужно, чтобы throw запускал обработчик then.

Ну так не ловите исключение в вашей функции или пробрасывайте наверх после выполнения необходимых действий в catch.

async appFn() {
  try {
    synchronousServiceWhichThrowsAnError()
  } catch (err) {
    throw new ApplicationSpecificErrorObjectWithSomeMetadata(err);
  }
}


К слову, в вашей «исправлённой» функции всё так же присутствует баг, с которым вы пытались бороться.

Странная статья. Слишком большой контраст. В начале все разжевывалось подробно, для тех кто прогает хоть чуть-чуть даже слишком подробно. А потом стало слишком непонятно даже для продвинутых прогеров.

НЛО прилетело и опубликовало эту надпись здесь

Что значит "компилирует и интерпретирует наш JavaScript-код", я думал он только интерпретируется (как-то) в движке.
Можете раскрыть этот вопрос?)

Непонятно, как это «async/await никак не меняет JavaScript (не забывайте, язык должен быть обратно совместим со старыми браузерами и не должен ломать существующий код).» В старых браузерах такое не заработает, так что ни о какой обратной совместимости говорить не приходится.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий