If vs.while在特定JavaScript代码中

If vs.while在特定JavaScript代码中,javascript,Javascript,为什么测试驱动JavaScript开发的作者(Christian Johansen)在下面的代码中使用while语句而不是if语句 function getEventTarget(event) { var target = event.target || event.srcElement; while (target && target.nodeType != 1) { target = target.parentNode; }

为什么测试驱动JavaScript开发的作者(Christian Johansen)在下面的代码中使用
while
语句而不是
if
语句

function getEventTarget(event) {
    var target = event.target || event.srcElement;

    while (target && target.nodeType != 1) {
        target = target.parentNode;
    }

    return target;
}

因为作者想一直沿着树走,直到找到正确的节点类型;它可能不是直接的父对象


但是,在这种情况下,这是没有意义的,因为
parentNode
将始终返回实际使用中的元素(或文档)。

因为他正在向上走。

如果你看得很清楚的话,在循环中,他用其父对象再次分配目标,而父对象不是节点类型1

 target = target.parentNode;
我不知道他在尝试什么,也不知道他的目的或目标是什么,但很简单

想象一下DOM

<div>
  <div>
     <div>
        <div>
           Imagine he starts from here.. he will always get the max parent with not nodetype 1 the hightes parent so the first div..
         </div>
     </div>
  </div>
</div>

想象他从这里开始。。他将始终获得最大父级,而不是节点类型1。hightes父级,因此第一个div。。

基本上是这样。他得到了更高的父母。。。这就是为什么他在循环。。if使用if。。他只会得到第一个家长

你知道
是一个循环,对吗?它将反复执行,直到条件变为false。但是
nodeType==1
是一个元素节点,所以只要你走出TextNode(在它触发事件的不太可能的情况下),你就有了一个元素。只要
nodeType=1
,这意味着它会在
节点类型==1
时停止,它总是会立即停止,或者在一次迭代后停止。是的,我的mystake,你是对的,但我认为他这样做是出于某种目的看看这个例子