我的一个朋友正在用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).
原文链接:https://www.f2er.com/js/429529.html额外信用:询问您的朋友他们以前是否用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";
}