Выражение ||
короткое замыкание после первого раза bind
возвращает true
.
При первой оценке
result = result || bind(...) // result is false at this point
bind
вызывается, потому что это единственный способ определить значение false || bind(...)
. Поскольку bind(...)
возвращает true
, result
имеет значение true
.
Каждый раз, когда вы говорите
result = result || bind(...) // result is true at this point
... выражение bind(...)
не вычисляется, потому что не имеет значения, что оно возвращает ; выражение true || anything
всегда true
, а выражение ||
короткое замыкание .
Один из способов гарантировать, что bind
всегда вызывается, - переместить его в левую часть ||
или изменить ||
на &&
, в зависимости от того, что вы пытаетесь выполнить result
.