Что выведет код Middle Современный синтаксис обновлено
Логическое присваивание и ленивое вычисление
Вопрос
Что выведет код? По строке на каждый вывод.
let calls = 0;
const make = () => { calls++; return 'новое'; };
const o = { a: 'есть', b: null, c: 0 };
o.a ||= make();
o.b ??= make();
o.c ||= make();
o.c &&= make();
console.log(o.a, o.b, o.c);
console.log(calls);
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: есть новое новое, 3. o.a истинно, поэтому = ничего не делает и make не вызывается. o.b равно null, ??= вызывает make (1). o.c равно 0, оно ложно, = вызывает make (2) и записывает 'новое'.
Что выведет
есть новое новое
3
Разбор
o.a истинно, поэтому ||= ничего не делает и make не вызывается. o.b равно null, ??= вызывает make (1). o.c равно 0, оно ложно, ||= вызывает make (2) и записывает 'новое'. Теперь o.c истинно, и &&= снова вызывает make (3). Итого три вызова.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.