微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Javascript中的break关键字是否仅用于打破循环?

我的一个朋友正在用Javascript教授一个编程课程,他的一个任务就是创建一个数字猜谜游戏.这是他的示例实现:

funProgram: for(;;) {
  numberGuesser: {
    var num = (Math.random() * 100) | 0;
    var guess = +prompt("I'm thinking of a number between 0 and 100. Try to guess it.",0);
    var guesses = 1;
    guess: for(;;) {
      higher: {
        lower: {
          if(guess === num) break guess;
          if(guess > num) break lower;
          guess = +prompt("Too low. Try again.",0);
          break higher;
        }
        guess = +prompt("Too high. Try again.",0);
      }
      guesses++;
    }
    alert("You got it in " + guesses + " guesses! The number is " + num);
  }
  var again = prompt("Do you want to guess again (y/n)?","y") === "y";
  if(!again) break funProgram;
}

他告诉我,标记代码并在其周围包装块是一个很好的做法,这样您就可以轻松地看到每个部分正在做什么.他还说标记的断点和继续比未标记的断点容易阅读,因为你可以确切地知道你正在突破什么.我从未见过这样的代码模式,所以我不确定这是不是真的.

我已经使用了一段时间的Javascript,这里有一些我以前从未见过的东西和一些我仍然不理解的东西.我认为break关键字专门用于打破循环.较高和较低的块不是循环,但显然你仍然可以突破它.怎么可能?打破一些不循环的东西对我来说似乎很奇怪.你还可以使用break关键字打破函数吗?

最佳答案
打破can in fact have labels(并接受它们).但是,我不确定“他”是谁,但我会说“他”正在传达他的编程理想,而不是一个特定的标准.也就是说,没有必要使用标签,它只是让那个特定的人更容易辨认. (而且,恕我直言,标签让人想起BASIC / GOTO天,通常会导致Spaghetti Code).

额外信用:询问您的朋友他们以前是否用BASIC写作;我打赌你会得到一个“是”(以及在课程期间有很多坏习惯 – 这不是简介,我从来没有对BASIC / VB程序员有过良好的经验]编码模式))

break命令通常用于退出循环,但是如果代码块嵌套在标签中,那么您将建立另一个可以中断的块.它还为您提供了更多的灵活性,以确定中断的出口位置.例如:

for (;;){ // "for a"
  for(;;){ // "for b"
    break; // breaks "for b"
  }
}

在这种情况下,break仅用于退出嵌套(“for b”)循环.然而:

myblock: {
  for(;;){
    for(;;){
      break mybock; // breaks label "myblock"
    }
  }
}

在这种情况下,break实际上是退出两个循环,因为你指示它完全退出标签块.这几乎就像有:

function myblock(){
  for(;;){
    for(;;){
      return; // exits function "myblock"
    }
  }
}

返回块退出块的方式类似于break myblock的行为方式.

顺便说一下,我发现这有点容易阅读:

var again = true;
while (again){
    var num = (new Date()).getMilliseconds() % 100,guess = +prompt("I'm thinking of a number between 0 and 100. Try to guess it.","1"),guesses = 1;
    while (num !== guess){
        guesses++;
        guess = +prompt((guess < num ? "Too low." : "Too high.") + " Try again.",guess);
    }
    alert("You got it in " + guesses + " guesses! The number is " + num);
    again = prompt("Do you want to guess again? (y/n)","y") == "y";
}

原文地址:https://www.jb51.cc/js/429529.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐