2015-12-17 50 views
0

因此,我嘗試在1和3之間創建三個值,每次加載頁面時都會有所不同。當我第一次打開頁面時,它完美地工作,但每當我嘗試重新加載或提交表單時,頁面都會凍結,並且它會卡住加載。任何幫助深表感謝!在打開時工作,但在重新加載時崩潰

function uniqueAnswerId(){ 
    var rand = (Math.random() * 3.4); 
    while (Math.round(rand) == 0) { 
     var rand = (Math.random() * 3.4); 
    } 
    return (Math.round(rand)); 
} 
var answerId1 = uniqueAnswerId(); 

function uniqueAnswerId2(){ 
    var rand2 = (Math.random() * 3.4); 
    while (answerId1 == Math.round(rand2) || Math.round(rand2) == 0) { 
     var rand2 = (Math.random() * 3.4); 
    } 
    return (Math.round(rand2)); 
} 

var answerId2 = uniqueAnswerId2(); 

function uniqueAnswerId3(){ 
    var rand3 = (Math.random() * 3.4); 
    while (answerId1 == Math.round(rand3) || answerId2 == Math.round(rand3)){ 
     while (Math.round(rand3) == 0){ 
      var rand3 = (Math.random() * 3.4); 
     } 
    } 
    return (Math.round(rand3)); 
} 

var answerId3 = uniqueAnswerId3(); 

console.log("AnswerIds: " + (answerId1) + ", " + (answerId2) + ", " + (answerId3)) 
+0

你檢查控制檯的任何錯誤? –

+0

我在控制檯中運行錯誤檢查,當我嘗試添加第三個「||」條件我得到一個錯誤。但改變==爲===做到了!不幸的是,太熟悉swift了,所以它的鬥爭回到了javascript ..非常感謝你所有的答案!它非常有幫助! –

回答

1

你的第三個while循環應該是這樣的,另一張 「||」在你的情況下,而不是一個全新的while循環。

function uniqueAnswerId3(answerId1, answerId2){ 
    var rand3 = (Math.random() * 3.4); 
    while (answerId1 === Math.round(rand3) || answerId2 === Math.round(rand3) || Math.round(rand3)===0){ 
      rand3 = (Math.random() * 3.4); 
    } 
    return (Math.round(rand3)); 
} 
0

我相信你有一個無限循環。這裏是修復你的代碼的小提琴。

變化:使用的,而不是「==」

功能提升「===」變量聲明之前執行這些功能,這意味着引用它們的函數中不起作用。添加了參數來接受所需的參數。

https://jsfiddle.net/80xdmsjL/

function uniqueAnswerId(){ 
    var rand = (Math.random() * 3.4); 
    while (Math.round(rand) === 0) { 
     rand = (Math.random() * 3.4); 
    } 
    return (Math.round(rand)); 
} 

var answerId1 = uniqueAnswerId(); 

function uniqueAnswerId2(answerId1){ 
    var rand2 = (Math.random() * 3.4); 
    while (answerId1 === Math.round(rand2) || Math.round(rand2) === 0) { 
     rand2 = (Math.random() * 3.4); 
    } 
    return (Math.round(rand2)); 
} 

var answerId2 = uniqueAnswerId2(answerId1); 

function uniqueAnswerId3(answerId1, answerId2){ 
    var rand3 = (Math.random() * 3.4); 
    while (answerId1 === Math.round(rand3) || answerId2 === Math.round(rand3)){ 
     while (Math.round(rand3) === 0){ 
      rand3 = (Math.random() * 3.4); 
     } 
    } 
    return (Math.round(rand3)); 
} 

var answerId3 = uniqueAnswerId3(answerId1, answerId2); 

console.log("AnswerIds: " + (answerId1) + ", " + (answerId2) + ", " + (answerId3)) 
0

看看你的這部分代碼:

while (answerId1 === Math.round(rand3) || answerId2 === Math.round(rand3)){ 
     while (Math.round(rand3) === 0){ 
      rand3 = (Math.random() * 3.4); 
     } 
    } 

讓我們看看會發生與以下值:

  • answerId1 = 1
  • answerId1 = 2
  • Math.round(rand3)= 1

在這種情況下,你將有:

while (true){ 
    while(false){ 
     never_executed(); 
    } 
} 

所以它會循環,直到外「而」無限。

爲了避免這種情況,你可以簡單地做@Nicholas Bakolias所說的,加上'另一個||'在你的條件,而不是一個全新的while循環'