javascript - 这个-11从哪里来的?

标签 javascript

我正在玩弄以下代码:

function recaller(){
    while(x-- > 0)recaller();
}

var x = 10;
recaller();
alert(x); //-11?

但我惊讶地发现 x 现在的值是 -11

我后来在 while 上面添加了 alert(x);,看看它是否正确显示了数字 100 确实如此。

谁能解释一下 -11 是从哪里来的?这次我的调试技巧失败了,我不知道如何继续测试

最佳答案

您正在递归到 recaller,因此 x 在递归结束时递减很多次 — 对于每次递归,当您退出该递归调用时while 循环条件将被再次检查,并且该表达式递减 x。考虑一下如果我们从 x = 2 开始会发生什么:

  1. x 是 2,我们调用 recaller(第一次)进入它的 while 循环,检查 x 是否大于零,递减和...
  2. x 为 1,我们调用 recaller(第二次)进入它的 while 循环,检查 x 是否大于零,递减和...
  3. x 为 0,我们调用 recaller(第三次)进入其 while 循环,检查 x 是否大于零 它不是,递减 (-1) 并返回
  4. 从一次到第二次展开堆栈;在其 while 循环中,检查 x 是否大于零 (no),递减 (-2) 并返回
  5. 第一次展开堆栈;在其 while 循环中,检查 x 是否大于零 (no),递减 (-3) 并返回
  6. 返回顶级流程
  7. x=-3

关于javascript - 这个-11从哪里来的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9863904/

相关文章:

javascript - 如何使用聚合MongoDB获取数据Mongo数据

javascript - jQuery:同时设置元素位置和不透明度的动画

javascript - 通过上下文提供对 API 的访问或通过参数提供对 API 的访问有什么区别?

javascript - 使用纯 javascript 的随机背景颜色生成器(无 jquery)

javascript - 在 mouseenter/leave 上用 javascript 显示和隐藏 <ul>

javascript - DevExtreme 使用 Angular Approach - onValueChanged 不起作用

javascript - 修改多维数组的一个索引会导致其他所有子数组发生变异?

javascript - if 语句未在第三个按钮单击上注册

javascript - 让 jQuery 在新构建的 WordPress 主题中工作

进行更改后 JavaScript 无法正常工作