javascript while循环问题,break不停止循环

javascript while loop problem,break doesn't stop the loop

我用 javascript 构建了一个简单的猜数字游戏。 在计算机猜出正确答案后,它应该打破循环。 我想知道的是,即使我在第 18 行打破了循环 它仍然执行第 20 行的代码 (console.log(text))。 有趣的是,休息后。只有 console.log() 被执行,L21 和 L22 什么都不做,它们应该是那样的。 真的想不通为什么。希望我把问题说清楚!

repl example

中执行最后 console.log()

但在下面的代码片段中没有(完全相同的代码)..

let answer = Math.floor(Math.random() * 100) + 1
// start coding
console.log('Answer is ' + answer)
let max = 100
let min = 0
let guess = Math.floor((max + min) / 2)
let i = 1
while (true){
  let text = `#${i}: computer guess ${guess}.`
  if (guess > answer){
    text += 'TOO BIG!'
    max = guess
  } else if (guess < answer){
    text += 'TOO Small!'
    min = guess
  } else{
    text += 'win!'
    break
  }
  console.log(text)
  guess = Math.floor((max + min) / 2)
  i++
}

我的猜测是因为 REPL 工具试图为您 运行 的代码显示 return 值,它使用代码退出前的最后一个值,即 text += "win!" . 所以它实际上并没有执行你的console.log(text),它只是看起来像。

例如,如果您将代码更改为以下内容,REPL 工具会吐出一个数字(后缀前 i 的值)。因为这是它在 while 循环退出之前看到的最后一个值。

REPL example 显示不同的 "return" 值,按预期记录

let answer = Math.floor(Math.random() * 100) + 1
// start coding
console.log('Answer is ' + answer)
let max = 100
let min = 0
let guess = Math.floor((max + min) / 2)
let i = 1
while (guess !== answer){
  let text = `#${i}: computer guess ${guess}.`
  if (guess > answer){
    text += 'TOO BIG!'
    max = guess
  } else if (guess < answer){
    text += 'TOO Small!'
    min = guess
  }
  console.log(text)
  guess = Math.floor((max + min) / 2)
  i++
}

// console.log(`#${i}: computer guess ${guess}. Win!`);

这不是正常的 JS 行为,在阅读 REPL 中的 "return" 值时应持保留态度 tool.Hope 这有帮助!