为什么这些代码在重复运行时在JSBin中运行不同?

时间:2016-10-15 11:08:00

标签: javascript

在JSBin上,这段代码每次运行时返回一个不同的数字,但它不作为Stack Snippet在这里:

function prime(num) {
  var primes = [];
  var i = 1;
  
  while (primes.length <= num) {
    if (isPrime(i)) {
      primes.push(i);
    }
    i++;
  }
  
  function isPrime(i) {
    for (var k = 2; k <= Math.sqrt(i); k++) {
      if (i % k === 0) {
        return false;
      }
    }
    return true;
  }
  
  return primes.pop();
  
}

console.log(prime(10001));

Link to JSbin。如果在JSBin上重复运行它,控制台中会显示什么:

enter image description here

1 个答案:

答案 0 :(得分:3)

如果查看chrome控制台,可以看到以下警告。这就是为什么循环在某个阶段随机断开的原因。

  

在第6行退出潜在的无限循环。禁用循环保护:   将“// noprotect”添加到您的代码中

如果您在代码顶部添加行// noprotect并在JSBin中运行它,它会一直给出正确的答案。

// noprotect
function prime(num) {
  var primes = [];
  var i = 1;

  while (primes.length <= num) {
    if (isPrime(i)) {
      primes.push(i);
    }
    i++;
  }

.....