2011-10-07 70 views
2

JavaScript:什么会打破,什么会打破它?

Potentially dangerous code below, line 2 
Repeat: POTENTIALLY DANGEROUS CODE BELOW

var history = ""; 
for (start = 3; start = 1000; start += 1){ 
    if(start % 5 == 0 || start % 3 == 0) 
    history += start + " "; } 

好吧,这是被冻结我的浏览器第十一次我把JavaScript代码在。它让我的电脑震惊。这些恐慌袭击是否会破坏她的心?在我继续学习和练习JavaScript的过程中,我可以从哪里了解可能会破坏计算机的所有垃圾?我只是在寻找一份详尽的清单。

+2

如果您设法使用Javascript破坏您的计算机,我会承诺给您买一个新的。 – aioobe

+0

你的循环永远不会终止,这就是它锁定你的浏览器的原因。你的意思是:(for start = 3; start <1000; start + = 1)'? –

+3

这是不可能回答的。你从错误中学习。打开任务管理器并杀死进程。使用你的调试器来找出你搞砸的地方。 – Matt

回答

7

你环for (start = 3; start = 1000; start += 1){
一个for(; ;)回路的第二部分是条件的测试。循环将继续,直到第二部分评估为假。不创建一个无限循环,你的代码更改为:

for (var start = 3; start < 1000; start += 1){ 

注:start+=1等于start++。如果你想要一个紧凑的代码,你可以用++代替+=1

三部分for -loop的概述,for(initialise; condition; increment)

  • initialise - 创建变量(允许为空)
  • condition - 循环将停止一旦这个表达式的值为false
  • increment - 此表达式在循环结束时执行
    总是检查无限循环:确保条件n能够评估为false

通常所犯的错误:

  • 连同负增量表达是-低于比较:
    i--减小计数器,所以i<100总是是真实的(除非变量i在100处被初始化)
  • 结合的正增量表达式是更高的一个比较。
  • 非递增表达:for(var i=0,j=0; i<100; j++)i不增加)
  • 这始终是真实的(如你的情况)的条件
+0

+1虽然我想指出,他可能应该使用<=而不是< –

+0

为什么会这样? 999是我正在看的最后一个。 –

+0

然后使用'start <1000'或'start <= 999'。条件的'condition'部分的有效表达式是种类'< <= > => ==!='**的比较,前提是**两个变量中的至少一个变化,以便表达式能够变为'假'。 –

4

你一定要学会并正确读到它。您的循环条件start = 1000将始终评估为true,这就是为什么循环不会终止(赋值返回分配的值,并且除0之外的任何其他数字的计算结果为true)。

MDN JavaScript Guide是学习JavaScript的好资源。特别针对这种情况:

for循环重复,直到指定的条件计算结果为false。 JavaScript for循环与Java和C for循环相似。一种用于语句看起来如下:

for ([initialExpression]; [condition]; [incrementExpression]) 
    statement 

当一个for循环执行时,将发生以下情况:

  1. 的初始化表达initialExpression,如果有的话,被执行。该表达式通常初始化一个或多个循环计数器,但是该语法允许表达任何复杂程度的表达式。这个表达式也可以声明变量。
  2. 评估condition表达式。如果condition的值为true,则执行循环语句。如果condition的值为false,则for循环终止。如果condition表达式被完全省略,则认为条件为真。
  3. 该声明执行。要执行多条语句,请使用块语句({ ... })将这些语句分组。
  4. 更新表达incrementExpression,如果有的话,执行,控制返回步骤2.

正如其他人说,这主要归结为尝试和错误....这是一个反正学习的好方法。

-1

呃 - 你在这里想要什么?

for (start = 3; start = 1000; start += 1) 

你想要这个吗? (3〜1000)

for (start = 3; start <= 1000; start += 1) 
在第一种情况下

你会停留在1000

1

你的条件语句开始= 1000将始终返回true。你不能找到这样的傻瓜证明清单,你必须自己从这些错误中吸取教训。

相关问题