JS学习练习?

JS learning exercise?

所以我刚开始从一本俗气的教科书中自学 JS,要弄清楚这段代码的作用是一个挑战:

function clunk (times) {
    var num = times;
    while (num > 0) {
        display("clunk");
        num = num - 1;
    }
}

function thingamajig (size) {
    var facky = 1;
    clunkCounter = 0;
    if (size == 0) {
        display("clank");
    } else if (size == 1) {
        display("thunk");
    } else {
        while (size > 1) {
            facky = facky * size;
            size = size - 1;
        }
        clunk (facky);
    }
}

function display(output) {
    console.log(output);
    clunkCounter = clunkCounter + 1;
}

var clunkCounter = 0;
thingamajig(5);
console.log(clunkCounter);

对于我的生活,我无法遵循这里给出答案的逻辑,即 "clunk" 将在控制台中显示 120 次。他们提到它与阶乘有关(我从来都不擅长数学......)但我找不到要显示 "clunk" 的代码重复那么多次的步骤。为了省去所有的细节,每次我在 paper/in 上浏览它时,我都会得到 "clunk" 1 作为控制台的输出...任何人都可以通过这个握住我的手或告诉我在哪里这个阶乘部分正在发生?谢谢!

我不会和你一起过一遍代码。但我将向您介绍一种方法,您可以自己浏览代码,逐步检查代码,并更好地理解它。

我指的是调试的使用。通过 运行 将上述代码与 node inspect script.js 结合,您可以 运行 调试模式下的脚本。这将允许您在脚本中放置小的停止标志,这将帮助您分析正在发生的事情 运行ning.

主要的停车标志就是debugger

当您将其放入代码中时,inspect 模式将在该点停止并让您从控制台本身访问脚本中设置的不同变量和方法。这样您就可以跟踪不同元素发生的情况,并逐步查看脚本的运行方式。

这样分析会帮助你更深刻地理解其中的逻辑,我强烈建议你试一试。

这里是 debugger 设置得体的脚本:

function clunk (times) {
    var num = times;
    while (num > 0) {
        display("clunk");
        num = num - 1;
        debugger;
    }
}

function thingamajig (size) {
    var facky = 1;
    clunkCounter = 0;
    debugger;
    if (size == 0) {
        display("clank");
        debugger;
    } else if (size == 1) {
        display("thunk");
        debugger;
    } else {
        while (size > 1) {
            facky = facky * size;
            size = size - 1;
            debugger;
        }
        clunk (facky);
    }
}

function display(output) {
    console.log(output);
    clunkCounter = clunkCounter + 1;
    debugger;
}

var clunkCounter = 0;
thingamajig(5);
console.log(clunkCounter);

试试吧!

  • Here 是关于调试器的文档。

专业提示: 您可以直接将代码复制粘贴到您的 chrome 控制台中,它将启动 chrome 调试器 运行 脚本。

因为aviya.developer已经和大家分享了调试程序的方法,我再跟大家说一下算法。我建议您多学习一下编程基础知识,因为您现在似乎已经很好地掌握了循环的工作原理。该算法依赖变量 fackysize 进行阶乘计算,然后我们将其传递给 display 方法。所以你可以重复几次迭代,你应该能够开始理解程序的流程。阶乘部分是 thingamajig 方法中的 while 循环。

facky = facky * size;

facky初始化为1,而我们的size为5。 阶乘的公式很容易找到 online:

n!=n×(n−1)×(n−2)...×2×1

5! = 5 * 4 * 3 * 2 * 1 = 120

  • 迭代 1:1 * 5 = 5
  • 迭代 2:5 * 4 = 20
  • 迭代 3:20 * 3 = 60
  • 迭代 4:60 * 2 = 120
  • 迭代 5:120 * 1 = 120

这是我们调用函数 clunk 所用的值。

clunk还有一个while循环,其终止条件为num > 0。这意味着我们将继续迭代这个条件为真。一旦不再为真,迭代将停止。

这意味着,我们将在迭代结束前调用值为“clunk”的方法 display120 次。

在分析算法时,重要的是找出该算法的关键 components/variables/operations,并跟踪它们如何随时间或迭代发生变化。这将指示何时达到最终目标。