Javascript 为什么';t';返回';在'内完全停止该功能;如果';陈述
我目前正在做访问DOM的工作。在页面底部,有一个小练习,介绍如何创建一个函数来遍历DOM中的所有节点并获取下一个节点。我已经有了代码,但我不确定它到底是如何工作的。这与DOM关系不大,而与if/while循环关系更大 代码如下:Javascript 为什么';t';返回';在'内完全停止该功能;如果';陈述,javascript,dom,Javascript,Dom,我目前正在做访问DOM的工作。在页面底部,有一个小练习,介绍如何创建一个函数来遍历DOM中的所有节点并获取下一个节点。我已经有了代码,但我不确定它到底是如何工作的。这与DOM关系不大,而与if/while循环关系更大 代码如下: nextNode = function(node) { if (node.firstChild) { return node.firstChild; } while (node) { if (node.nextS
nextNode = function(node) {
if (node.firstChild) {
return node.firstChild;
}
while (node) {
if (node.nextSibling) {
return node.nextSibling;
}
node=node.parentNode;
};
return node;
};
我的问题是:
我希望我的问题有意义。我只是想了解在执行这个函数的过程中所采取的步骤 此代码定义了稍后调用的函数。该函数返回一个值 这些if和while条件决定返回的内容 第一个
if
检查节点是否有子节点。如果是,则返回它,并在此处结束函数执行
如果没有,脚本将继续执行而循环
同样,如果节点有一个同级节点,它将返回它,从而结束函数。只有在没有兄弟姐妹的情况下,它才能继续到父级
遍历完成后,它返回节点
的最终值中的任何内容返回
的工作方式与您假设的相同-它完全终止函数调用。您的函数所做的基本上是深入DOM树演练中的一个步骤:
检查节点是否有子节点,如果有,则返回该子节点。如果没有
检查节点是否有以下同级,如果有,则返回该同级。如果没有
检查节点的父节点是否有以下同级,如果有,则返回它(递归循环)。如果确实没有以下节点
返回null
,(因为它仅在未定义节点时退出而循环)
您需要意识到的关键是,这个函数被设计为在一个循环中被多次调用。每次调用函数时,它都会返回一次,只有一个节点值。每次调用时,它都可以通过函数遵循不同的路径
例如,它首先检查所选节点是否有子节点。如果有,它会“退回”它。这不应该结束功能吗
如果有子节点,它会结束函数,因为return
语句位于if
中。否则,它将继续执行函数的其余部分。无论哪种方式,它都会在后续调用函数时到达下一个节点
当它继续执行while循环时,它会检查是否有下一个兄弟。它也“返回”了这个。它要把它还给什么
调用函数与往常一样,假设它尚未通过从函数顶部的if
返回值或从该while
循环的上一次迭代返回值来结束调用
然后跳转到父节点,然后再次检查
只有当它还没有返回时。您确定它没有结束函数吗?您是否尝试过单步遍历它以查看它通过函数的路径以及if语句的计算结果?您可以添加调试器代码>行作为函数的第一行如果你想这样做谢谢,我会更新它。这对我来说似乎无关紧要,所以我没有在文档中查找默认值parentNode
。