console.log() - синхронная или асинхронная операция?
Асинхронность и Event Loop
`console.log()` — синхронная операция в JavaScript: вызов выполняется сразу, в момент, когда до него доходит выполнение. Но вывод в консоль браузера может отображаться с нюансами.
Синхронность вызова
console.log выполняется синхронно — он не возвращает промис и не откладывается:
console.log('1');
console.log('2');
console.log('3');
// 1, 2, 3 — по порядку, синхронноНюанс — «ленивое» вычисление объектов
При логировании объекта консоль браузера может показать его состояние на момент раскрытия, а не вызова (объект логируется по ссылке):
const obj = { count: 0 };
console.log(obj); // в консоли раскроете позже — увидите count: 1
obj.count = 1;Это не про асинхронность console.log, а про то, что консоль хранит ссылку и показывает объект «живым». Примитивы логируются по значению — без этого эффекта.
В Node.js
console.log пишет в stdout; при записи в файл — синхронно; в терминал и пайпы поведение зависит от платформы (на POSIX вывод в терминал синхронный, на Windows — асинхронный). Но с точки зрения кода вызов синхронный.
Коротко для собеседования
console.log() синхронный — выполняется сразу по порядку. Нюанс: при логировании объекта консоль браузера хранит ссылку и может показать его состояние на момент раскрытия (кажется «асинхронным»), но это про ссылку, а не про отложенность вызова. Примитивы логируются по значению.