Javascript函数中的冒号和while循环

4
我在查看一些HTML5 JavaScript演示时发现了一些以前从未见过的语法。请查看run函数并注意while循环中search对象符号的使用方式。感兴趣的行包括15和18。有人能解释这个语法吗?
function run() {
  var n = 1;
  search: while (running) {
    n += 1;
    for (var i = 2; i <= Math.sqrt(n); i += 1)
      if (n % i == 0)
       continue search;
    // found a prime!
    postMessage(n);
  }
}

(代码取自此处;http://html5demos.com/js/cruncher.js


请看这里:https://dev59.com/n3RC5IYBdhLWcg3wD87r 使用谷歌搜索,你就会找到! - Henrik Andersson
1
@limelights 这篇帖子讨论的是冒号的更常见用法,但这里情况并非如此。 - tybro0103
第18行中的%是一个模数。 - tybro0103
尽管阅读整篇文章后会发现“:”运算符也是某个东西的标签,但我认为这样可以一举两得。 - Henrik Andersson
我真的不知道JavaScript有这样的标签。我有点高兴我不知道... - jbabey
4个回答

6

这不是对象(字面量)表示法,而是定义一个label

可以使用label为循环结构命名。这样做的好处是可以通过引用外部循环(按其标签)创建更强大的break;continue;

注意你所引用的程序的结构是:

search: while () {
   for (;;;) {

   }
}

...作者在for循环内使用continue search;来继续执行while循环。

至于第18行发生了什么,if (n % i == 0)使用模运算符(%)获取n/i的余数,并检查它是否为0。


2
每天学点新东西。 - Matt

3

search: 在这种情况下是一个标签,您可以使用它来引用此循环。

例如,您可以通过执行 break search; 来中断此循环。


1

由于没有人回答你的两个问题

search: while,这里的search是一个标签,有助于唯一标识while循环,正如前面提到的,在嵌套循环中使用break和/或continue时非常有用。

第18行的代码(n % i ===0)

基本上是通过应用模运算操作来查找奇数。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接