2011-10-07 71 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。你不能找到這樣的傻瓜證明清單,你必須自己從這些錯誤中吸取教訓。

相關問題