Ответ 1
Это обычный способ убедиться, что ваша функция существует до ее вызова.
Он работает следующим образом (From developer.mozilla.com):
expr1 && expr2
Возвращаетexpr1
, если его можно преобразовать вfalse
; в противном случае возвращаетexpr2
. Таким образом, при использовании с булевыми значениями&&
возвращаетtrue
, если оба операндаtrue
; в противном случае возвращаетfalse
.
Другими словами, Javascript не принуждает операнды к логическим значениям, если это не нужно.
4 && 5
Возвращает 5, а не true.
В вашем случае, если первое выражение undefined
(которое конвертируется в false), то ctx
будет ложным, а второе выражение не будет оцениваться. Если первое выражение является функцией (которая не может быть преобразована в false
), тогда Javascript оценивает второе выражение и присваивает значение переменной ctx
.