每当我想到使用while loop
,我不明白为什么我不能只使用if statement
来代替。我知道一个while循环运行'while'给定的语句是真实的,但是如果条件瞬间在块内部终止,那么我就无法想象任何事情发生。如果任何人都可以给我举例说明如何/为什么我应该使用while loop
。这将非常感激。while语句有什么好用处?
回答
我会试着给你一个非常高层次的答案,因为我认为直观地理解它会更容易。
将所有算法都视为食谱。一个典型的配方可能有一个看上去像部分如下:
- 如果花生具有壳,它从壳
- 分离将鸡蛋打散,直到它被鞭打和气泡
- 取5分葱,切碎他们每个人都在一半
这些类型的方向你有不同的方式做任务。
第一个实际上是一个“if”语句。如果条件(花生有壳)是真的,你可以做点什么。你从字面上做:
if (not shelled) {
shell the peanut! // happens once
}
第二个是一个while循环。你击败了鸡蛋而它没有鞭打和起泡。你不断地做同样的事情(鞭)),当你这样做的时候你会看着它(一遍又一遍地)来检查它是否变得非常有活力。一旦它变得起泡和足够鞭打,你就停下来。当你停下来是因为你已经通过你的“时间”条件。需要注意的一件重要的事情是,在你开始之前,你不一定知道一个鸡蛋需要多少次“鞭打”才能使它产生鞭打。你只需要做很多次,并多次检查(用你的眼睛)。你从字面上做:
while(not whipped enough) {
beat egg! // happens over and over
}
就像在食谱,你不希望有人做了一定的动作,直到时间的尽头,所以你必须始终确保您的while循环,有理智的停止条件。大多数while循环取决于循环内部的某些变化,并在该变化足够时停止。
第三个配方示例是for循环。对于每个洋葱你有(5)你对那个洋葱做了一次。你从字面上做:
for (onions 1 to 5) {
Chop an onion! // done 5 times total, once per onion
}
+1非常好的插图,显示三者之间的区别和正确用法 – momo
这真的可以帮助我可视化一个while循环实际上在做什么。谢谢! – 0x499602D2
while
是一个循环结构,而不仅仅是if
var i = 0;
while (i < 10) {
//this stuff will happen until
//i < 10
// usually you iterate the counter so it
// eventually breaks the loop because
// i < 10 is no longer true
i++;
}
这样做同样的事情,因为这
for (var i = 0; i < 10; i++) {
//this stuff will happen until
//i < 10
}
良好的用例的另一种形式,而
一般为当需要发生迭代次数已知时,使用循环,所以通常当迭代数组时,您知道数组for
的长度是一个不错的选择,因为您可以明确设置迭代次数。
while
的更好的用例是迭代量不是静态的(已知)和/或您正在等待事件发生以打破循环。
A while
循环将执行一遍又一遍只要满足条件,就是如果条件永不改变,它将进入无穷大。
的if
将执行一次当条件满足
***如果循环*** ....真的..? – jondavidjohn
哈哈,我陷入了思考'for'循环的问题。修正了我的措辞,但并没有改变我的答案。 –
while
将继续运行,直到条件为假。
如果条件在块的末尾仍然为真,则循环将重新运行。
if
只会运行一次。
那么if statement
不会回环绕。它只会发生一次,除非你把它放在一个循环中。一个while statement
将发生不止一次,只要声明仍然如此。
如果你想创建一个无限循环while循环会做的伎俩
var done=false;
while(!done){
alert("I am annoying");
}
的for
语句可以用while来模拟:
for(var i=0; i<length; i++) {}
// is the same as
var i=0;
while(i<length) {
// stuff
i++;
}
它也用于像循环:
while(true) {
// stuff... (like waiting for user input, analyzing some data until
// it hits a brick wall and needs to quit)
if(some_condition) {
break;
}
}
或其他东西:
while(a != b) {
if(a > b) {
a -= b;
} else {
b -= a;
}
} // find the GCD of a and b
正如您所看到的,它与if
完全不同,并解决了其他问题。
- 1. Assert语句有什么好处?
- 2. 我的“while”语句有什么问题
- 3. 在Python中使用'with .. as'语句有什么好处?
- 4. while(condition){// work}`和`do {// work} while(condition)`有什么好处?
- 5. 在T-Sql插入语句中使用Row Constructor语法有什么好处?
- 6. 为什么不读while语句?
- 7. PHP while while语句中的语句?
- 8. 这是什么模式/成语?有什么好处?
- 9. (;;){}或while(true){}有什么更好?
- 10. 与while循环中的open语句有什么不对吗
- 11. 什么是处理多个if/else语句的更好方法?
- 12. mysqli准备好的语句是什么?
- 13. 哪个LINQ语句更好,为什么?
- 14. 使用准备好的语句有什么限制?
- 15. While语句
- 16. 元组有什么好处?
- 17. StringBuilders有什么好处?
- 18. 粘液有什么好处?
- 19. AJAX有什么好处?
- 20. “svn:externals”有什么好处?
- 21. Cakephp,它有什么好处?
- 22. cURL有什么好处?
- 23. ConcurrentSkipListMap有什么好处?
- 24. VS2010 SP1有什么好处?
- 25. AnkhSVN有什么好处?
- 26. JRebel有什么好处?
- 27. WTP有什么好处
- 28. 反射有什么好处?
- 29. Assert() - 它有什么好处?
- 30. Boost IPC有什么好处?
我不知道如何'if'语句可以接近老实替换'while'循环:? – Loktar
@Loktar:转到? :) –
我的不好,它似乎并不存在于JavaScript中。 –