This is happening due to operator precedence. Taking a simpler
example:
return i || typeof i === 'function' ? i() : (i + 3); where i is 1
Explanation from ChatGPT:
* First, the typeof operator is evaluated for i. Since i is 1, typeof i
returns the string 'number'. The result of this operation is `'number'.
* Then, the === operator is applied to 'number' and 'function'. The
result is false because these two strings are not equal.
* Now, we have the logical OR (||) operator. The i (which is 1) is
compared to the result of the typeof and === operations combined, which
is false. Since 1 is considered truthy, the || operation results in 1.
* After the || operation, we have the conditional (ternary) operator ? :.
In this case, the condition to the left of ? is 1, which is truthy, so
the expression after ? is evaluated.
* i() is the expression after ?. Since i is not a function, and the
condition to the left is truthy, it attempts to call i() but throws
a "TypeError: i is not a function" error.
Fiddle that demonstrates the issue: https://jsfiddle.net/t2v1w6ae/2/
Bug: T347847
Change-Id: If5e8405141dfafd53c4495c91265545ec01acab3