Комментарии 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));
Event Loop для начинающих. Не так страшно, как вам рассказывали