繁体   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