#jquery
#jquery ( jquery )
Вопрос:
Строка 4140 jQuery 1.7rc1:
while ( (elem = elem.previousSibling) amp;amp; elem.nodeType !== 1 ) {}
На мой взгляд, это странно. Эквивалентно ли это
while( elem amp;amp; elem.nodeType !== 1 ) elem = elem.previousSibling;
?
Комментарии:
1. Вау, я и не знал, что в jQuery делают такие хаки…
Ответ №1:
Нет, это не эквивалентно тому, что у вас есть. Исходный код:
while ( (elem = elem.previousSibling) amp;amp; elem.nodeType !== 1 ) {}
эквивалентно этому:
while (elem.previousSibling amp;amp; elem.previousSibling.nodeType !== 1) {
elem = elem.previousSibling;
// other code here
}
Логически, это говорит о циклическом выполнении, пока есть previousSibling
и, пока previousSibling's
nodeType !== 1
и присваивается elem
этому previousSibling
.
Назначение в исходном условии while — это ярлык, который сохраняет отдельное назначение и сохраняет дополнительный контрольный уровень в nodeType
проверке.
Разрушение цикла while еще больше, это то же самое, что и это:
while (elem.previousSibling) {
elem = elem.previousSibling;
if (elem.nodeType !== 1) {
break;
}
// other code here
}
Эта часть:
(elem = elem.previousSibling)
присваивает elem.previousSibling
elem
, а затем оценивает, является ли elem правдивым или нет.