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