【问题标题】:Confused about while loop in javascript对javascript中的while循环感到困惑
【发布时间】:2012-06-26 16:11:59
【问题描述】:

我在这里可能有点厚,但请回答我。考虑以下代码:

a=1;
while(a<=6) {
   console.log(a);
   a++;
}

如果我运行它,我会在控制台中获得从 1 到 6 的值,然后是另一个 6。

现在看看这个:

a=1;
while(a<=6) {
    console.log(a);
    ++a;
}

现在运行它会得到从 1 到 7 的值。

为什么会这样?我的理解是,语句块只有在表达式计算为真时才会运行。在我的第二个示例中,这怎么可能?为什么 6 在第一次出现两次?让我很困惑。

如果你能简单地解释一下(我还在学习)那就太好了。

【问题讨论】:

  • 你能显示完整的代码吗,因为 ++a;和一个++;如果它们是单独的陈述而不是与其他陈述复合,则它们是相同的。
  • 第二个例子打印 1 到 6 -> jsfiddle.net/USYSH
  • @ManseUK 不在 Firefox 中。关键因素是从浏览器 JavaScript 控制台执行此操作,其行为是这里的问题所在。最后打印的数字不是console.log() 调用的结果。
  • @epascarello 这不是同一个问题。更多的是对控制台输出的混淆。

标签: javascript


【解决方案1】:

控制台会为您打印最后评估的语句的值。在第二种情况下,您预先递增,所以它的值是 7 而不是第一种情况下的 6。

更改您的console.log() 呼叫以打印更多内容,这将是显而易见的:

console.log("a is: " + a);

你不会在最后一行看到那个前缀。

【讨论】:

  • 这对我来说根本没有意义。如果值为 7,为什么它超过了初始条件(即 a
  • 它没有超过初始条件。恰好执行的最后一条语句是++a;,因此控制台会“免费”打印。
  • @Romil 抱歉,但该声明不正确。它们在浏览器 JavaScript 控制台的上下文中是不一样的,它总是打印出语句的结果值。立即在您的浏览器中尝试一下。
  • 啊!!一分钱下降......浏览器总是打印出最终值。谢谢 - 这突然变得非常清楚,我很高兴我没有崩溃。
  • 对于任何感兴趣的人,here's a question 处理语句块的“返回”值。 (只能通过 eval 观察到。) jsfiddle.net/gNfCV
【解决方案2】:

在这两种情况下,您都会看到一个额外的数字,因为控制台正在输出循环中最后一条语句的结果。

如果该代码未直接在控制台中执行,您将看不到多余的数字。

【讨论】:

  • while 语句没有“结果”。
  • true,但在控制台上下文中会输出最后一条语句
【解决方案3】:

查看fiddle 及其回复。两者都返回 1 到 6。

a++ : 返回递增前a的值。

++a : 增加后返回a的值。

循环执行直到 'a'

当您在控制台上运行任何代码时,它会评估变量值并打印其值,这也是您在输出中获得更多67 的原因。

不用担心,当您运行此代码时,只会得到 1-6 的值。

【讨论】:

  • 可能应该通读 cmets。 OP 询问console 中观察到的输出,第二个代码示例通常包括7
  • 请查看jsfiddle.net/eqA8t。我也检查了控制台..它只返回 6。 :):)
  • jsfiddle 显示的内容并不重要,因为这不是 OP 所要求的。如果您直接在控制台中键入代码,它通常会包含7(我说“通常”是因为可能有一些控制台不这样做。)这个问题并不完全清楚,但 cmets 解决了它。
猜你喜欢
  • 2023-01-13
  • 2016-07-13
  • 2018-10-03
  • 1970-01-01
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-07
相关资源
最近更新 更多