JavaScript: про ленивую обработку и сокращённые вычисления

Вы не знаете JS: про ленивую обработку и сокращённые вычисления

В моём экземпляре «Вы не знаете JS: Типы и грамматические конструкции» есть раздел про порядок выполнения логических операторов. Здесь есть неточность: результаты примеров выше обусловлены тем, что интерпретатор отбрасывает части выражения, которые не требуются вычислять.
Действуют принципы Ленивых вычислений (Lazy evaluation) и Вычислений по короткой схеме (Short-circuit evaluation):

Short-circuit evaluation: отбрасывает операнды, которые не изменят результата выражения.
Lazy evaluation: не выполняет отброшенные операнды (то есть до того, как они использованы в выражении), даже если это вызовы функции.

Short-circuit evaluation поддерживается только для логических операторов, для побитовых операторов все операнды вычисляются.

Применение

Любители Clean code для улучшения читаемости кода могут написать что-то вроде:

В каком-нибудь компилируемом языке компилятор, возможно, сделает оптимизацию и встроит вызов функции вместо переменной. JS интерпретатор выполнит то, что написано разработчиком, и вычислит оба выражения перед использованием.

Разумнее встроить вызовы тяжёлых операций и написать:

Примечание: принципы Clean code я люблю и уважаю, а пример, конечно, выдуман. Результаты функций, сохранённые в переменной, могут пригодиться далее по коду программы, но всегда стоит подумать, нельзя ли в подобной ситуации сэкономить немного ресурсов.

Ещё один пример с React

Иногда я вижу результаты прилежного причёсывания кода по принципу «Собрать все переменные в одном месте. Ч — Читаемость!»:

childComponentProps вычисляются в любом случае, даже если Wrapper не выводится.

Как и в прошлом примере, стоит встроить вызов метода, и вычислять свойства компонента только при необходимости: