【问题标题】:Callback and incrementing variable回调和递增变量
【发布时间】:2017-01-28 20:09:34
【问题描述】:

为什么回调console.logs的结果是result = array[0] or 1而不是array[1] or 2?

    function test(array, callback) {
        var startingIndex = 0;

        var result = array[startingIndex];

        startingIndex++;

        callback(result);

    }

        test([1, 2, 3], function(result) {
            console.log(result);
    });

【问题讨论】:

  • 您对回调的额外复杂性感到困惑。如果您在现在调用callback(result) 的位置执行console.log(result),您会看到相同的结果。调试艺术的一部分是简化和再简化一些,并且不被与问题无关的事情分心。另外,您知道如何在浏览器中使用 JavaScript 调试器吗?如果您在调试器中逐行执行代码,您会立即看到发生了什么。这里是Chrome DevTools的介绍。
  • 我在函数内部使用了没有回调和console.log(result)的Chrome调试器,当它到达startingIndex++时,startingIndex从0更新为1,但对结果没有影响。它保持在 1.. 仍然对为什么在 console.log 之前没有更新结果感到困惑。不知道我错过了什么。
  • JavaScript 按照您编写的顺序逐句执行您的代码。 resultstartingIndex 是两个不同的变量。改变一个不会影响另一个。

标签: javascript increment


【解决方案1】:

这是因为您在分配result 变量之前增加了startingIndex 变量。

你有:

var result = array[startingIndex];
startingIndex++;

交换这两行,你会得到预期的结果:

startingIndex++;
var result = array[startingIndex];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    相关资源
    最近更新 更多