循环算法递增一个数字直到达到一个值,然后递减

Looped algorithm to increment a number until it reaches a value, then decrement

我试图递增一个数字直到它达到一个值(比如说 100),然后让它递减直到它达到 0,然后将所有这些 运行 放在一个 while 循环中。

代码看起来是正确的,但是浏览器卡顿了,如果算法有问题,我无法在控制台中查看。

var ceiling = 100;
var floor = 1;
var x = 1;
var step = 1; 

setInterval(function(){
    while(1) {
        while(x + step <= ceiling) {
            x += step;
            document.write(x + ' ');        
        }
        while(x - step >= floor) {
            x -= step;
            document.write(x + ' ');        
        }
    }
}, 1500);

我在这里使用了 setInterval 来减慢执行速度并避免浏览器出现一些缓冲问题。这应该不是问题,因为我有 16GB 的 RAM,但这可能取决于浏览器如何在一个选项卡中 use/access。

我也试过将 setInterval 函数包装在另一个函数中并执行它,结果相同。

你有一个 while(1) 循环,基本上是一个无限循环,即使没有执行任何代码,它也会冻结浏览器。

document.write 仅用于文档的首次呈现。因为你在做一个间隔,所以文档已经呈现了,你不能使用 document.write。相反,您需要将文本附加到正文或 div

其他答案已经指出了无限循环和使用 document.write 的问题。

我认为这符合您的要求:

var ceiling = 100;
var floor = 1;
var x = 1;
var step = 1;

setInterval(function() {
  console.log(x);
  x += step;
  if (x === ceiling || x === floor) {
    step = -step;
  }
}, 1500);

setInterval 本质上是您的 while(1) 循环。