Предполагая, что ваш код выглядит следующим образом:
return e.input || L(), e.addTest = function(a, b) {
...
}
Этот код:
- Оценка
e.input || L()
- Это означает, что
L
будет работать, если e.input
не falsy (undefined
, 0
, false
, null
, пустой строка)
- Оценка
e.addTest = function(a, b) { ... }
- Это сохраняет новую функцию в
e.addTest
- Затем урожаи, которые действуют для всего выражения, так что функция возвращается
Вы можете думать об этом as:
return ((e.input || L()), e.addTest = function() { ... })
, где выполняется операция ||
, а затем операция присвоения.
Это потому, что:
- Оператор
||
коротка-circuting, и даст его первый не-falsy операнд
- Так
return a || b
возвращается a
если a
является truthy или иначе возвращает b
- Оператор
,
оценивает оба операнда слева и справа, но затем дает право o perand
- Так
return a(), b()
работает как a()
и b()
, но возвращает результат b()
- Операция присваивания дает значение, присвоенное
- Так
return a = 5
будет хранить 5
в a
, а затем вернуться 5
В вашем случае вы видите undefined
, потому что возвращаемое значение alert
всегда undefined
.
Что именно вы хотели бы знать? Что такое 'e.input || L() 'или почему есть запятая после' L() '? – VisioN