父函数JavaScript中的While循环
我在解释此代码的作用时遇到问题。这是:父函数JavaScript中的While循环,javascript,Javascript,我在解释此代码的作用时遇到问题。这是: function parent(e, n) { if (n === undefined) n = 1; //if n is not defined, use 1 by default while(n-- && e) e = e.parentNode; if (!e || e.nodeType !== 1) return null; return e; } 此函数接受两个参数。一个用于元
function parent(e, n) {
if (n === undefined) n = 1; //if n is not defined, use 1 by default
while(n-- && e) e = e.parentNode;
if (!e || e.nodeType !== 1) return null;
return e;
}
此函数接受两个参数。一个用于元素,第二个用于元素的祖先。因此,在第二个参数中传递2将检索元素的祖辈(DOM树上的2个元素)
除了
while
循环之外,我完全理解它。我不知道倒计时是如何选择那个特定的祖先的。while循环如何使这个函数选择一个祖先呢?这里重要的一点是数字是“真实的”(或虚假的)0
的作用与false
相同。因此,当n
达到零时,循环结束
因此,如果n
从2开始,循环最多运行2次
另一种情况更容易理解。如果节点没有父节点,则循环也将终止
循环的每次迭代都会执行
e=e.parentNode
,这将获取“当前”节点的父节点。如果循环执行2次迭代,将在dom上向上移动2层(“祖父母”)。看起来它获得了第n个父元素…循环的每次迭代都会查看传入元素的父节点。因此,如果传入一个以1作为迭代因子的特定div,它将查找div的直接父级。如果传入2,它将查找2个父级(div父级的父级)。它通过使用e.parentNode并在循环的每次迭代中将e重置为其父节点来实现此目的。尝试以下方法:
var n = 2;
while(n--) console.log("do this " + n + " more times.");
if(0){
console.log("never executed because zero is evaluated as false");
}
在支持console.log的浏览器中
在说明数字0的计算结果为假之前,已给出答案
n——表示返回n的值,然后减去1。如果在上面的代码中有--n,那么它只会执行一次(先减去)
在代码中,如果n为2,则循环将执行2次,在循环中,变量e(元素)设置为元素的父节点。如果没有父节点,那么e将是未定义的,在这种情况下,If(e){…}语句不会做任何事情,因为计算未定义的值会导致false。因此,当e未定义时(例如没有父节点),即使n不是0,n&&e也会返回false。我知道while循环将在它达到0时终止。。但是函数如何确切地知道向上提升两个DOM元素??我在任何地方都看不到这种逻辑。
e=e.parentNode
“上升”一级。这是一个执行n次的循环。啊!这让我很高兴。把这个加在答案上,我给你打勾。这是有道理的。太真实了,我肯定应该读得更仔细些,对不起!我应该删除我的回复吗?什么是正确的礼仪?我看你会学得很快:)无论如何,任何时候你可以扩展或改进你的答案,就去做吧。在这种情况下,由于问题已被标记为已由其他人回答,可能不会有太大影响(除非您的答案最终更好)。很高兴知道,非常感谢ewall让我成为一名更好的堆垛工!:)