Обновить

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

Мне когда-то не хватало простой мысли в куче учебников по js, отчего такие приколы с setTimeout и с некоторыми другими функциями. А оказалось все просто - setTimeout не является функцией из js, а является функцией, которую добавляет окружение, т.е это реализация браузера Web APIs

js скачивается отдельно как бинарь, он готов интерпретировать ваш код, если там нет функций окружения. И изучать js необходимо именно с пониманием, что вот это язык, а вот этот язык расширяется окружением/средой. И с таким разделением сразу становится понятно, почему необходимы коллбеки промисы, код на выполнение выходит в другое место и результат вычислений необходимо забирать не простым return a+b.

JS не бинарь и не скачивается, и ничего не интерпретирует. Это интерпретируемый язык

Естественно я про интерпретатор говорил. Не найду сейчас репозиторий, который распространяет v8 в отдельным бинарем рядом с соответствующей версией хрома, но работает это вот так:
https://v8.dev/docs/d8

Чистый интерпретатор js без webapi

Это понятно, далее идут байндинги, и движки рендера

Интересное замечание, спасибо! Тоже заметила, что в JS и около есть темы, которые лучше понимаются, если их объясняют шире, чем принято...

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

Я хотела написать заметку о "не простой штуке" очень просто, насколько это возможно сделать, не погрешив против истины) Чтобы человек, который до сего дня ничего не слышал про евент луп, получил общее представление, а потом на этом основании строил "настоящее и сложное", ссылки я добавила. Не каждому дано перейти от "полного незнания", к чтению сложных статей и документаций. А если кто-то решит, что ему и этого хватит, лишь бы пройти собеседование, то пусть это останется на его совести)

Предполагается, что с таким подходом проще понять, как выполняется хитрый код со вложенными друг в друга колбэками, промисами и таймерами

На простых примерах - да. Но иногда бывает с небольшим подвохом:

Пример
setTimeout(() => console.log(a - b), 0);

const promise = new Promise((resolve) => {
    func();
    resolve();
});

let a = 1;
let b = 2;

function func() {
    a++;
}

promise
    .then(() => console.log(a))
    .catch(() => console.log(b--))
    .catch(() => console.log(0));

Promise.resolve().then(() => console.log(3));
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации