Javascript 为什么';t';返回';在'内完全停止该功能;如果';陈述

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

我目前正在做访问DOM的工作。在页面底部,有一个小练习,介绍如何创建一个函数来遍历DOM中的所有节点并获取下一个节点。我已经有了代码,但我不确定它到底是如何工作的。这与DOM关系不大,而与if/while循环关系更大

代码如下:

nextNode = function(node) {
    if (node.firstChild) {
        return node.firstChild;
    }

    while (node) {
        if (node.nextSibling) {
            return node.nextSibling;
        }
        node=node.parentNode;
    };
    return node;
};
我的问题是:

  • 此功能将采取的第一步是什么?例如,它首先检查所选节点是否有子节点。如果有,它会“退回”它。这不应该结束功能吗?我以为返回是一种打破功能的方式?为什么会继续

  • 当它继续执行while循环时,它会检查是否有下一个兄弟。它也“返回”了这个。它要把它还给什么?然后跳转到父节点,然后再次检查


  • 我希望我的问题有意义。我只是想了解在执行这个函数的过程中所采取的步骤

    此代码定义了稍后调用的函数。该函数返回一个值

    这些if和while条件决定返回的内容

    第一个
    if
    检查节点是否有子节点。如果是,则返回它,并在此处结束函数执行

    如果没有,脚本将继续执行
    循环

    同样,如果节点有一个同级节点,它将返回它,从而结束函数。只有在没有兄弟姐妹的情况下,它才能继续到父级


    遍历完成后,它返回
    节点

    的最终值中的任何内容
    返回
    的工作方式与您假设的相同-它完全终止函数调用。您的函数所做的基本上是深入DOM树演练中的一个步骤:

  • 检查节点是否有子节点,如果有,则返回该子节点。如果没有
  • 检查节点是否有以下同级,如果有,则返回该同级。如果没有
  • 检查节点的父节点是否有以下同级,如果有,则返回它(递归循环)。如果确实没有以下节点
  • 返回
    null
    ,(因为它仅在未定义
    节点时退出
    循环)

  • 您需要意识到的关键是,这个函数被设计为在一个循环中被多次调用。每次调用函数时,它都会返回一次,只有一个节点值。每次调用时,它都可以通过函数遵循不同的路径

    例如,它首先检查所选节点是否有子节点。如果有,它会“退回”它。这不应该结束功能吗

    如果有子节点,它会结束函数,因为
    return
    语句位于
    if
    中。否则,它将继续执行函数的其余部分。无论哪种方式,它都会在后续调用函数时到达下一个节点

    当它继续执行while循环时,它会检查是否有下一个兄弟。它也“返回”了这个。它要把它还给什么

    调用函数与往常一样,假设它尚未通过从函数顶部的
    if
    返回值或从该
    while
    循环的上一次迭代返回值来结束调用

    然后跳转到父节点,然后再次检查


    只有当它还没有返回时。

    您确定它没有结束函数吗?您是否尝试过单步遍历它以查看它通过函数的路径以及if语句的计算结果?您可以添加
    调试器行作为函数的第一行如果你想这样做谢谢,我会更新它。这对我来说似乎无关紧要,所以我没有在文档中查找默认值
    parentNode