Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带break和label语句的循环的嵌套Javascript_Javascript_Break - Fatal编程技术网

带break和label语句的循环的嵌套Javascript

带break和label语句的循环的嵌套Javascript,javascript,break,Javascript,Break,我对Javascript有点陌生,目前正在阅读《面向Web开发人员的专业Javascript》一书,我遇到了这段代码,它使用break语句退出当前循环并跳转到一个名为outermost的标签 现在我明白了break和labels的作用,但我不明白为什么最后的值是55 好的,带有var i的for循环将循环4次,然后在5时,它将开始标记:最外层,与j相同,因此第一次迭代i=4,j=4,num=2。我想这部分让我很困惑。。代码在什么时候停止。如果我要从头开始编写代码,我的第一个本能反应就是使用一个外

我对Javascript有点陌生,目前正在阅读《面向Web开发人员的专业Javascript》一书,我遇到了这段代码,它使用break语句退出当前循环并跳转到一个名为outermost的标签

现在我明白了break和labels的作用,但我不明白为什么最后的值是55

好的,带有var i的for循环将循环4次,然后在5时,它将开始标记:最外层,与j相同,因此第一次迭代i=4,j=4,num=2。我想这部分让我很困惑。。代码在什么时候停止。如果我要从头开始编写代码,我的第一个本能反应就是使用一个外部变量,并在此基础上设置条件。但是使用下面的代码,我无法得到控制结构的位置和最终值。感谢您的帮助,或是被指向正确的方向,谢谢

var num = 0;

outermost:

for (var i=0; i < 10; i++) {
    for (var j=0; j < 10; j++) {
        if (i == 5 && j == 5) {
            break outermost;
        }
        num++;
    }
}
alert(num);

此嵌套循环正在模拟里程表。i是10的数字,j是1的数字。每当1的数字改变时,num就会增加;在每次迭代开始时,num包含里程表的值


当i和j都为5时,循环停止。此时,里程表的读数为55,这是数值。

当我从0到4时,最里面的循环执行50次。当i=5时,最里面的循环只执行5次,直到它到达i==5&&j==5并跳出。所以总共是55次。

这本书是面向Web开发人员的专业Javascript——专业开发人员永远不会编写类似的代码。@zerkms:这本书是面向Web开发人员的专业Javascript,而不是专业开发人员;两个循环都从0到10。这将导致10*10个循环。如果i==5&&j==5,它会运行5*10+5次。顺便说一下,不要使用标签和带标签的break语句,这是一种非常老式的方式……我同意@zerkms。尽管许多编程语言都支持带标签中断,但这是一个真正不应该被支持的功能,我从来没有理由使用它,大多数程序员也没有理由使用它,因为它可以通过循环或子例程上的更清晰的条件轻松避免。好吧,我明白你的意思了,它开始变得更有意义了,但是为什么最外层的循环i在10位,而j在1位?我想我看到了我缺少的东西-num++属于最内层的循环,所以每次j达到10时,它会给i加上+1?每次内循环重复时,它会给i加上1,而不仅仅是当它达到10时。我看到了,我想我得到了它。。。我知道break语句不是javascript中的首选解决方案,但我想确保我准确地理解它在嵌套for循环中的工作方式。因此,基本上55表示的是外部循环和内部循环运行的次数。如果我们把if条件改为10,那么我们得到100,改为4,我们得到44,依此类推。但这是否意味着var num持有这两个循环的引用?