簡體   English   中英

如果滿足條件,我該如何“重啟” if語句?

[英]How do I “restart” if statement if a condition is met?

我對javascript很陌生。 我想用我父親教給我的公式,制作一個快速的程序,使一個人可以根據自己的年齡約會。 在我的代碼中,我有一個條件,如果我的var(日期)不是數字,則要求用戶輸入數字。 我希望程序然后重新詢問變量分配提示,直到給出數字為止。

var dateage = prompt("How old are you?");

if(dateage >= 14){
    dateage = dateage/2 + 7;
    alert("The youngest you can date is " + dateage)
} else if(isNaN(dateage)){
   alert("Please enter in a number");
} else
   alert("You're too young to date.");

您會看到,如果日期不是數字,則會提醒用戶。 此時,我希望再次出現提示,詢問用戶年齡。 我怎樣才能做到這一點?

將其置於函數中,以便您可以重新調用

function checkAge() {
    var dateage = prompt("How old are you?");

    if(dateage >= 14){
        dateage = dateage/2 + 7;
        alert("The youngest you can date is " + dateage)
    } else if(isNaN(dateage)){
       if (confirm("Please enter in a number")) checkAge();
    } else
       alert("You're too young to date.");
}
checkAge();

我使用了confirm進行重新檢查,因為這意味着您可以更輕松地擺脫無限循環的情況。 如果您不想污染名稱空間,則可以將其編寫為命名的IIFE ,如果您不想繼承堆棧,則可以通過setTimeout進行調用。

您可以將其放在函數中,然后繼續調用該函數:

function askAge(){
   var dateage = prompt("How old are you?");

   if(dateage >= 14){
      dateage = dateage/2 + 7;
      alert("The youngest you can date is " + dateage)
   } else if(isNaN(dateage)){
      alert("Please enter in a number");
      askAge();
   } else
      alert("You're too young to date.");
}

askAge();

將問題包裝並在while循環中輸出,僅在輸入數字時中斷

就個人而言,我喜歡具有“可重啟”功能的外觀:

(function() {
    var restart = arguments.callee; // "magic" property refers to current function
    if( somecondition) setTimeout(restart,1);
    else {
        // do actual stuff
    }
})();

setTimeout釋放了當前的調用堆棧,否則,如果設法無限循環restart ,則可能會出現堆棧溢出錯誤。

 function checkAge() { var dateage = prompt("How old are you?"); if(dateage >= 14){ dateage = dateage/2 + 7; alert("The youngest you can date is " + dateage) } else if(isNaN(dateage)){ if (confirm("Please enter in a number")) checkAge(); } else alert("You're too young to date."); } checkAge(); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM