[英]JavaScript: Trouble understanding logic in this while loop
新手警報! 我似乎無法理解while循環中的邏輯。 它摘自O'Reilly的“ JavaScript:權威指南”第15.3章示例15-2。 我知道它會將n遞減n--。 但是我無法理解布爾AND運算符背后的原因或理論。 這個循環在說什么? 當n遞減而var e存在時? 對我來說,似乎應該在遞增,但是當我將-更改為++時,該函數始終返回null。 幫助我更深入地了解。
var firstpara = document.getElementsByTagName("p")[0];
/**
* Return the nth ancestor of e, or null if there is no such ancestor
* or if that ancestor is not an Element (a Document or DocumentFragment e.g.).
* If n is 0 return e itself. If n is 1 (or
* omitted) return the parent. If n is 2, return the grandparent, etc.
*/
function parent(e, n) {
if (n === undefined) n = 1;
while (n-- && e) e = e.parentNode;
if (!e || e.nodeType !== 1) return null;
return e;
}
parent(firstpara, 1); //returns <body>...</body> which is the parent node in my testpage
它返回<p>
標簽的第n
個父對象。
假設這是示例代碼。
<div class="outer">
<div class="inner">
<p>Sample Code</p>
</div>
</div>
parent(firstpara,1)
將給您第一個祖先,在此示例中為<div class="inner">...</div>
。
parent(firstpara,2)
將為您提供第二個祖先,在此示例中為<div class="outer">...</div>
。
parent(firstpara,0)
會給您相同的標簽,即<p>...</p>
最后, parent(firstpara,10000)
將為您提供null,因為這樣的祖先不存在(可能)。
我希望我說清楚了。
while條件語句由n--
和e
兩部分組成。 只要兩者都成立,循環就會繼續。 對於第一部分,如果(n--)== 0,則為false。否則為true。 如果定義了e,則第二部分為true。 第一部分可能是您掛斷的電話。 從本質上講,這是執行兩個語句的一種簡便方法: n = n - 1;
然后是if (n != 0 AND e exists) then continue looping
(偽代碼)。
假設雙星號是試圖在示例中生成粗體文本的示例,我們將得到以下結果:
while (n-- && e) e = e.parentNode;
n--遞減生成代數...一旦達到零,它將變為假,從而停止循環。 -將減少零而留下-1,但這沒關系,因為它是測試減少之前的n值。
如果節點提前耗盡,因為沒有值是false,則“ e”也會停止循環。
&&保證n必須仍然為正,並且e繼續存在。 要么bing false都會結束循環。
偏執我會更像這樣編碼循環:
while (n-- > 0 && e) e = e.parentNode;
這樣可以確保,無論如何,代碼都不會以奇怪的方式失敗。 這是我很久以前學到的循環的一般規則,適用於所有循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.