Я читаю книгу о javascript, и я столкнулся с этим синтаксисом
это функция
function unwantedTextEvent(){
return (navigator.vendor == 'Apple Computer, Inc.' && (event.target == event.relatedTarget.parentNode
|| (event.eventPhase == 3 && event.target.parentNode == event.relatedTarget)));
};
а затем внутри другой функции, автор делает именно это
attachEventListener(li, 'mouseover', function(e){
if (unwantedTextEvent()) { return; }
clearTimeout(closetime);
if (branch == li) { branch = null; }
//and so on
Теперь мне стыдно признаться, что я еще никогда не видел этот синтаксис:
if (unwantedTextEvent()) { return; }
и я не знаю, что он делает. Может ли кто-нибудь объяснить мне? Что делает этот синтаксис вообще?
заранее спасибо
Этот синтаксис вызывает функцию, называемую unwantedTextEvent()
. Если эта функция возвращает положительное логическое значение, возвращается функция обратного вызова function(e)
внутри attachEventListener
.
Он просто прекращает выполнение функции обратного вызова.
unwantedTextEvent()
возвращает true, function(e)
продолжает выполняться, а если unwantedTextEvent()
возвращает false, function(e)
останавливается? И код продолжается после function(e)
?
true
(т.е. когда unwantedTextEvent()
true
), function(e)
возвращается. Если он не удовлетворяет условию, он продолжает проверять оставшуюся часть функции до тех пор, пока она не завершится или не вернется из-за другого условия, встречающегося позже.
В принципе, unwantedTextEvent()
- просто большое условие. Если это условие истинно, оно прекратит выполнение функции
Код после возврата никогда не запускается.
Это то же самое, что и делать:
if (!unwantedTextEvent()) {
clearTimeout(closetime);
if (branch == li) { branch = null; }
//and so on
}
unwantedTextEvent()
возвращает true, function(e)
не выполняется, а если возвращает false, function(e)
выполняется? Как я могу отредактировать код, чтобы сделать как, if returns false
? Например, if (unwantedTextEvent()) { !return; }
if (!unwantedTextEvent()) { return; }
Видишь группу внутри если?
Это обычное, if
выражение. Общий вид if
:
if (<test expression>) {
<code to execute>
}
необязательно, за которым следует предложение else
(но ваш пример этого не имеет).
В этом случае <test expression>
является вызовом функции unwantedTextEvent
. Если он возвращает истинное значение, выполняется <code to execute>
, и функция возвращается. В противном случае он будет продолжен с остальной функцией.
Возврат завершает функцию немедленно. Этот синтаксис выходит без возврата значения.
return;
оператор просто выходит из функции, переданной в attachEvenListener. т.е. анонимная функция.