JS中的循環嵌套 BOM函數


[嵌套循環特點]
            
              外層循環轉一次,內層循環轉一圈
              外層循環控制行數,內層循環控制每行元素個數
             [做圖形題思路]
              1確定圖形一共幾行  極為外層的循環的次數
             2確定每行有幾種元素,代表有幾個內層循環。
             3 確定每種元素的個數,即為每個內層循環的次數
                 tips:通常:找出每種元素個數,與行號的關系式,極為當前循環的最大值(從1開始循環)
             
  題目:1+(1+2)+(1+2+3)+(1+2+3+4)+(1+2+3+4+5)=?      
            
         var sum = 0,sumrow=0;
            for(var a =1;a>=1&&a<=5;a++){
               sumrow=0;
                 if(a!=1)document.write("(")
                  for(var b=1;b<=a;b++){
                     if(b<5)document.write(b+"+");
                     else document.write(b);
                      sumrow+=b;
                  }
                  if (a==1)document.write("+");
                 else if(a==5)document.write(")=");
                  else document.write(")+");
                 
                 sum+=sumrow;    
          }

            document.write(sum)

圖形題

[長方形]
            
              *****
              *****
              *****
              *****
            
        for(var a=1;a<=5;a++){
            for(var b=1;b<=5;b++){
                document.write(b)
                }
            document.write("<br />");
        }       
[直角三角形]
          *
          **
          ***
          ****
          *****
         for(var a=1;a<=5;a++){
             for(var b=1;b<=a;b++){
                 document.write(b)    
             }
             document.write("<br />");
         }
         
         
         
 [平行四邊形]
          *****
           *****
            *****
             *****
              *****
         
         for(var a=1;a<=5;a++){
             for(var c=1;c<=a-1;c++){
                 document.write("&nbsp")
             }
             
            for(var b=1;b<=5;b++){
                document.write(b);
                }
            document.write("<br />")
        }

[菱形]
            *          1     3
           ***         2     2
          *****        3     1
         *******       4     0
          *****       1     5
           ***        2     3
            *         3     1
          
      
         for(var a=1;a<=4; a++){
             for(var c=1;c<=4-a;c++){
                 document.write("<span style='display: inline-block;width: 7px;'></span>")
             }
             for(var b=1;b<=2*a-1;b++){
                 document.write("*")
             }
             document.write("<br />")
         }
         
         
         for(var d=1;d<=3;d++ ){
             for(var f=1;f<=d;f++){
                 document.write("<span style='display: inline-block;width: 7px;'></span>");
             }
             for(var e=1;e<=7-2*d;e++){
                 document.write("*")
             }
             
             document.write("<br />")
         }
         
         
         
[數字等邊三角形]
             1
            121
           12321
          1234321
         for(var a=1;a<=4; a++){
             for(var c=1;c<=4-a;c++){
                 document.write("<span style='display: inline-block;width: 7px;'></span>")
             }
             var n=1
             for(var b=1;b<=a;b++){
                 document.write(n)
                 n++
             }
             for(var d=1;d<=a-1;d++){
                 document.write(n-2)
                 n--
             }
             document.write("<br />")
         }
        
        
        
        
[九九乘法表]
 1*1=1
 2*1=2 2*2=4
 3*1=3 3*2=6 3*3=9
…………

    
    document.write("<table border='1'>")
    for(var a=1;a<=9;a++){
        document.write("<tr>")
        for(var b=1;b<=a;b++){
            document.write("<td>"+a+"*"+b+"="+a*b+"</td>")
        }
        document.write("</tr>")
    }
    document.write("</table>")

 

控制台打印ATM 取款機 
              瀏覽器控制台打印輸出
             
              console.log("請輸入0-6之間的數字\n111");
             
              \n 表示換行  
             
             \t 制表符,使光標退到下一個制表位。(每個制表位,4個字符;前一制表位若不滿4個字符,則后面內容在下一格顯示;前一制表位若滿4個字符,則后面內容空一個顯示;)
            
           console.log("請輸入0-6之間的數字\n1111\t2\t333");
    
   
      需求描述:假設一個簡單的ATM機的取款過程為:
      首先提示用戶輸入密碼(password),假設默認密碼為111111,最多只能輸入3次,
      超過3次則提示用戶“密碼錯誤,請取卡”,結束交易。
    
     如果用戶密碼正確,再提示用戶選擇金額(amount),
     “請輸入0到6中任意數字選擇對應錢數:0手動輸入金額,1100元, 2300元,
      3500元, 41000元, 53000元, 65000元”。
    
     輸入數字如果錯誤,提示“輸入錯誤,是否繼續 Y/N”,選擇Y重新提示輸入錢數編號,
     選擇N提示“輸入錯誤,請取卡!”。選擇數字為1到6,打印對應錢數,
     並提示“是否繼續 Y/N”。選擇數字0,ATM機只能輸出100元紙幣,
     自定義錢數要求最低為100元,最高為1000元。如果用戶輸入的金額符合上述要求,
     則打印輸出用戶取的錢數,並提示“取款完成,是否繼續Y/N”;否則輸出一句話“金額錯誤,
     是否繼續 Y/N”,如果用戶輸入Y,提示用戶重新選擇取款金額,如果用戶輸入 N,
     打印“交易取消,請取卡!”
    
     ps:取款成功后,應該提示用戶是否繼續,總取款金額不能超過2萬
   


     【解題思路】
      1、驗證密碼
         密碼正確,繼續執行下面操作;
         密碼錯誤3次,return;
     2、取款操作。全部包含在 while循環內部。
         ① 提示選擇編號;
         根據編號,給money賦值。用switch結構實現。
            1~6:直接給money賦固定值,0:手動賦值操作;
         驗證取款是否成功。money-本次取款金額,moneySum-本次取款之前的總金額
           判斷moneySum+money是否>20000,3種情況:
               >2000 本次取款超額,但moneySum之前並不足20000,繼續下次循環;
               =2000 取完本次money后,剛好滿額。money可以加到sum上,然后return;
               <2000 取完本次money后,仍未上限。money可以加到sum上,繼續下次循環。
         驗證是否繼續,while-if結構實現,有3種情況:
               Y/y 將小循環break,繼續執行取款大循環;
               N/n 直接return,停止所有操作;
               其他 continue,繼續執行小循環,重復輸入Y/N
    
        代碼開始
        
        function func(){
        console.log("***********歡迎使用ATM機取款業務**********");
        驗證密碼
        var i = 1;
        for(; i <= 3; i++) {
            console.log("請輸入密碼:");
            var pwd = parseInt(prompt("請輸入密碼:"));
            if(pwd == 111111) {
                console.log("密碼輸入正確!");
                break;
            }
        }
        if(i > 3) {        
            return;
        }
        console.log("************請根據序號進行取款************");
        取款操作
        var moneySum = 0; //取款總金額
        var money = 0; //本次取款金額
        while(true) {
            console.log("0-手動輸入金額");
            console.log("1-100元\t\t2-300元\t\t3-500元");
            console.log("4-1000元\t\t5-3000元\t\t6-5000元");
            console.log("請選擇:");
            var chooseNum = parseInt(prompt("請選擇取款序號0-6:"));
            switch(chooseNum) {
                case 1:
                    money = 100;
                    break;
                case 2:
                    money = 300;
                    break;
                case 3:
                    money = 500;
                    break;
                case 4:
                    money = 1000;
                    break;
                case 5:
                    money = 3000;
                    break;
                case 6:
                    money = 5000;
                    break;
                case 0:
                    while(true) {
                        console.log("請輸入取款金額:");
                        money = parseInt(prompt("請輸入取款金額:"));
                        if(money >= 100 && money <= 1000 && money % 100 == 0) {
                            break;
                        } else {
                            console.log("您輸入的金額不合法,");
                            continue;
                        }
                    }
                    break;
                default:
                    console.log("序號選擇錯誤!");
                    break;
            }
        
            驗證總取款金額是否超過20000
            if(moneySum + money < 20000) {
                console.log("取款成功,本次取款" + money + "元,");
                moneySum += money;
                console.log("總取款" + moneySum + "元");
            } else if(moneySum + money == 20000) {
                console.log("取款成功,本次取款" + money + "元,");
                moneySum += money;
                console.log("總取款" + moneySum + "元");
                console.log("今日取款已達上限,情取卡!");
                break;
            } else {
                console.log("取款失敗!每日取款上限20000元,您已取" +
                    moneySum + "元,還可取" + (20000 - moneySum) + "元");
            }
        
            驗證是否繼續
            while(true) {
                console.log("是否繼續(Y/N):");
                var isGoON = prompt("是否繼續(Y/N):");
                if(isGoON == 'y' || isGoON == 'Y') {
                    break;
                } else if(isGoON == 'n' || isGoON == 'N') {
                    return;
                } else {
                    console.log("輸入有誤,請選擇Y-繼續,N-退出,");
                }
            }
        }
        
        console.log("感謝您的使用!");


        代碼結束
    }

           判斷正整數    
            判斷是否為正數         Number(num)>0 肯定正確
            parseFloat(a)==parseInt(a) 肯定是整數

while(true){
                var a = prompt("請輸入一個數");
            if(Number(a)>0&&parseFloat(a)==parseInt(a)){
               break;
            }
            }
          while(a>10){
              var b = parseInt(a%10);
              document.write(b);
              a = parseInt(a/10);
          }

 


              編寫一個程序,最多輸入十個數字,並求出其中所有正數的和,用戶可通過輸入999終止程序,統計用戶輸入的正數個數,並顯示這些數的和
              輸入非數值,不占用十次機會,但要求重新輸入。
              輸入的是數值,只累加正數。
          
            var sum=0,count=0;
           document.write("您輸入的數值為:");
            for(var a=1;a<=10;){
                var num = prompt("請輸入第"+count+"個數") ;
                if(!Number(num)&&Number(num)!=0){
                    //非數值
                    continue;
               }
                if(num==999){
                    break;
                }
                document.write(num+"&nbsp");
                if(num>0){
                    sum+=parseFloat(num);
                    count++;    
                }
               a++
            }
            document.write("您輸入了"+count+"個數");
            document.write("<br />正數的和為"+sum);
           
            
            
    簡易ATM取款機   
       
        var isTrue =false;
          for(var n=1;n<=3;n++){
            num = prompt("請輸入密碼:");
            document.write("您輸入的密碼:"+num+"<br />")
            if(num==111111){
                isTrue=true;
                break;
            }else{
                
            }
            
         }
          if(!isTrue)alert("密碼輸入錯誤,請取卡")
               
          while(isTrue){
                   
                    a =prompt("請輸入金額")
                    
                  if(a>0&&a<=1000&&a%100==0){
                      document.write("您取了"+a+"元!<br />交易完成,請取卡");
                      break
                  }else{
                     alert("請重新輸入金額");
                     document.write("您輸入的金額有誤,請重新輸入金額:"+a+"<br />")
                  }
              
          }

請輸入某年某月某日,並判斷是這一年的第幾天
         
      var year = parseFloat(prompt("請輸入年份"));
       var month = parseFloat(prompt("請輸入月"));
       var day = parseFloat(prompt("請輸入日期"));
       var sum = 0;
         假設是平年 2月28日

         方法一
     for(var i=1;i<month;i++){
          if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){
             sum+=31;
         }else if(i==4||i==6||i==9||i==11){
             sum+=30;
         }else if(i==2){
              sum+=28;
          }
      }
   if((year%4==0&&year%100!=0||year%400==0)&&month>2){
              sum+=(day+1);
         }else{
              sum+=day;
          }
      document.write(sum) ;

         方法二
      switch(month-1){
          case 12 :
             sum+=31
          case 11:
             sum+=30
          case 10 :
             sum+=31;
          case 9 :
             sum+=30;
          case 8 :
             sum+=31;
          case 7 :
             sum+=31;
          case 6 :
             sum+=30;
          case 5 :
             sum+=31;
         case 4 :
             sum+=30;
          case 3 :
           sum+=31;
          case 2 :
             sum+=28;
          case 1 :
             sum+=31 ;
         
      }
      if((year%4==0&&year%100!=0||year%400==0)&&month>2){
              sum+=(day+1);
         }else{
              sum+=day;
          }
      document.write(sum) ;

BOM 函數

[函數的聲明即調用]
             1 函數聲明的格式
             使用function  函數名(參數1,參數2,……………){
                  函數體
                 return 結果;
             }
              函數調用的格式。
             函數名(參數1的值,參數2的值,參數3的值,………………)
             2 函數聲明的幾點強調
               函數名的聲明,必須符合小駝峰法則,首字母小寫,之后每個首字母大寫。
               參數列表可以有參數可以無參數,分別稱為有參函數和無參函數。、
                聲明函數時的參數列表稱為形參列(變量的名),調用參數是的列表稱為實參列表(變量的值)。
                 函數中實際有效的參數取決於實參的賦值,未被賦值的形參,稱為Undefined。
                函數如果需要返回值,可用return返回結果,
                 調用函數時,使用var 變量名=函數名();的方式,接受返回結果。
                 如果沒有返回值,則接受的結果為Undefined;
                函數中變量的作用域;
                 在函數中,使用var聲明的變量,默認為函數局部的變量,只在函數內容能用
                 不適用var聲明的變量,默認為全局變量,(函數中的全局變量,必須在函數調用后,才能使用)
                 函數的形參列表,為函數局部的變量,只能在函數內部使用。
                函數聲明和函數調用沒有先后之分,即,調用語句可寫在聲明語句之前。
 
            function func1(){
                console.log("調用無參函數");
            }
            func2(1,2,3)
 
            var func2Num;
            function func2(num1,num2,num3){
                func2Num = num1;
                console.log("調用有參函數");
                console.log("num為:"+num)
                console.log("參數1為:"+num1)
                console.log("參數1為:"+num2)
                console.log("參數1為:"+num3)
                return true;
            }   
            var num = func2(1,2,3);
            console.log(num)
        
[匿名函數的聲明及調用]
             1  聲明一個匿名函數,直接發個一個事件,
             window.onload=function(){}\
             2 使用函數表達式,聲明匿名函數
                     聲明函數表達式   var func = function(){}
                     調用函數表達式    func();
               >>>使用匿名函數表達式,則調用語句,必須在聲明語句之后,否則報錯,(對比常規函數聲明與調用的區別)      
             3 使用自執行函數,聲明並直接調用匿名函數
               !function(參數1){}(參數1的值);//使用任意運算符,一般用!
               (function(){}());//使用()將匿名函數及之后的括號包括
                (function(){})()//使用()只包裹匿名函數表達式
               三種寫法特點:
                結構清晰,開頭加!,結尾加() 不易亂,推薦使用.
                可以表明匿名函數與之后的()為一個整體,推薦使用。
              ③  無法表明匿名函數與之后的()為一個整體,不推薦使用。
                
         
            window.onload=function(){
                console.log("使用window.onload調用匿名事件");
            }
            

            var func3 = function(){
                console.log("使用函數表達式,調用匿名函數。")
            }
            func3();
            

            !function(){
                console.log("使用函數表達式,調用匿名函數。")
            }();
            
            (function(){
                console.log("使用函數表達式,調用匿名函數。")
            }());
            
            (function(){
                console.log("使用函數表達式,調用匿名函數。")
            })();
            

            !function(num){
                console.log("使用函數表達式,調用有參函數,參數為:num="+num)
            }(1);
        
[函數內部的屬性]
             [arguments對象]
             1  作用  用於保存調用函數時,所賦值的實參列表。
             >>>當我們調用函數,並使用實參賦值時,實際上參數已經保存在arguments數組中,即使沒有形參,也可以使用arguments[]的形式調用函數。
             2 arguments數組的個數,取決於實參列表,與形參無關。(順序從0開始)
                     但當第N個位置的實參,形參,arguments都存在時,形參與arguments是同步的,及在函數中修改其中一個的值,另一個也會同步變化。
             3 arguments.callee是arguments的重要屬性,用於返回arguments所在函數的引用。
               arguments.callee()可以調用自身函數執行。
                      在函數內部調用函數自身的寫法,被稱為遞歸,所以arguments。callee ()是遞歸調用時常用的方式。    
              [this]:
              指向函數調用語句所在的作用域,即誰調用函數,this指向誰。
              
          
            
            function func6(){
                function func6_1(){
                    return this;
                }
                console.log(func6_1())
                return this;
            }
            console.log(func6())
            
            
            function func4(num1,num2,num3,num4,num5){
                console.log("Arguments")
                console.log(arguments[0]);
                console.log(arguments[1]);
                console.log(arguments[2]);
                console.log(arguments[3]);
                console.log(arguments[4]);
                
                //arguments.callee();
                //func4();
            }
            func4(1,2,3,4);
            
            
            
            console.log(num)
            var num =10
            funN();
            function funcN(){}
          1上述代碼執行流程
            JS中代碼運行,會先進行檢查,裝載,即聲明變量,函數等操作,
            然后再進行執行階段,(變量的賦值等屬於執行階段)
            所以函數的聲明屬於檢查裝載階段,函數調用屬於執行階段,所以,函數調用語句寫在函數聲明語句之前,並沒有任何關系
            所以上述代碼執行流程
            檢查裝載階段
            var num;  聲明變量
            function funcN{}  聲明函數
            執行階段
            console.log(num);
            num=10;
            funcN{};  執行函數的{}中的代碼。
          

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM