【问题标题】:How to construct a JavaScript for loop with a function如何使用函数构造 JavaScript for 循环
【发布时间】:2018-06-28 13:49:10
【问题描述】:

我正在为一个函数构建一个循环。

函数loop 接受一个值、一个测试函数、一个更新函数和一个主体函数。每次迭代,它首先对当前循环值运行测试函数,如果返回 false,则停止。然后它调用 body 函数,给它当前值。最终,它会调用更新函数来创建一个新值并从头开始。

loop(10, n => n > 0, n => n - 1, console.log);

function loop(a, b, c, d) {

    let currentValue = a;
    let i;
    for (i = 0; i < currentValue; i++) {
        if (b(currentValue)) {
            d(currentValue);
            update(c);

            function update(c) {
                var executeUpdate = c(currentValue);
                currentValue = executeUpdate;
            };
        } else {
            return;
        }
    };
}


// OUTPUT: 10, 9, 8, 7, 6

为什么这个函数停在6而不是1

【问题讨论】:

  • b 返回一个布尔值,当前值在您的示例 int 中。你的 if 语句是如何工作的? if (bool &lt; int)
  • @Fallenreaper 对,我刚刚编辑了函数。奇怪的是输出没有机会。

标签: javascript function for-loop


【解决方案1】:

function update(c) {
  var executeUpdate = c(currentValue);
  console.log('value of exeucteUpdate: ',executeUpdate, 'when i:', i)
  currentValue = executeUpdate;
};

update 函数中执行console.log,您会注意到i == 4,executeUpdate 为5,并且您更新了forloop 的值,因此循环在此特定循环处终止

【讨论】:

  • 明白了。将 for 循环检查子句锚定到 a 的静态值 (i = 0; i
【解决方案2】:

您可以使用少量的 console.logs 来查看它。

其实for-cycle在currentValuei等于5的时候就结束了,所以条件不成立,循环就结束了。

但是您的情况没有任何意义,您正在将 true 与某个数字进行比较(如您在日志中所见)

loop(10, n => n > 0, n => n - 1, console.log);

function loop(a, b, c, d) {

    let currentValue = a;
    let i;
    for (i = 0; i < currentValue; i++) {
        console.log(i, currentValue);
        console.log(b(currentValue), currentValue)
        if (b(currentValue) < currentValue) {
            d(currentValue);
            update(c);

            function update(c) {
                var executeUpdate = c(currentValue);
                currentValue = executeUpdate;
            };
        } else {
            console.log('I am not here');
            return;
        }
    }
    console.log('finished', i, currentValue);
}

【讨论】:

  • 是的。我刚刚编辑了条件,但奇怪的是输出仍然相同。 > 实际上,for-cycle 在 currentValue 和 i 等于 5 时结束,因此条件不满足,循环终止。 currentValue 设置为 10。
猜你喜欢
  • 2017-02-20
  • 2021-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-14
  • 1970-01-01
  • 2019-09-30
相关资源
最近更新 更多