簡體   English   中英

JavaScript:在while循環中難以理解邏輯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM