JavaScript基礎13 for循環(huán) 2 break與continue萄涯、嵌套循環(huán)

for循環(huán)的其他寫法

1绪氛、

  var i = 0;
  for(     ; i < 5 ; i++ ){ alert ( 5 )};
      這里要空著 且 ;也要寫

2涝影、

 var i = 0;
 for(    ; i < 5 ;    ) {
             這是里變化語句可以寫在下面 要空著放著
      alert( i );
      i++;
  }

可改寫:

  var i = 0;
  while( i < 10 ){
        alert ( i );
        i++;
  }

3枣察、循環(huán)體保有一句的時候大括號可以不寫

  for( var i=0 ; i<5 ; i++)  console.log( i );

while 在…期間

語法:

var i = 0;
while( 條件 ){
事件;
變化語句;
}

  var i = 0;
  while( i < 10 ){
        alert ( i );
        i++;
  }

do{ } while() 先做什么再判斷

語法:

var i = 0 ;
do{
事件;
}while( x<5 );

先執(zhí)行代碼:至少會執(zhí)行一次再做判斷;

例:

  var x = 10;
  do{
     alert( x );
     x++;
  } while( x < 5 );   

只彈一次 10 會先執(zhí)行再來判斷燃逻;

  var x = 10;
  while ( x < 5 ){
      alert ( x );
      x++;
  }

不執(zhí)行序目;


for里的break與continue

switch里的break,作用是表明這種情況結(jié)束伯襟;
for里的break作用是阻斷該層for的執(zhí)行(跳出循環(huán))

continue跳過該次循環(huán)(也就是下面的代碼不執(zhí)行了)猿涨,進入下一次的循環(huán);

例:
break:

    for( var x = 0 ; i < 10 ; i++){
    docuement.write( x + '<br>');
    if( x === 5 ){                              1
          break;                                2
      }                                         3
}                                               4
                                                5
                                      就跳出循環(huán)了姆怪,就結(jié)束

continue:

    for( var x = 0 ; i < 10 ; i++){
    if( x === 5 ){                                                       1
       continue;                                                         2
      }                                                                  3
    docuement.write( x + '<br>');                                        4
    }                                                                    6  
                                                                         7
                                                                         8  
                                                                         9
                                                      執(zhí)行到5的時候跳過叛赚,執(zhí)行再下來的循環(huán)

注意:用continue變化語句一定要放在for的括號里;
如果放在下面執(zhí)行語句時會出現(xiàn)死循環(huán)稽揭;
例:

  for( var i = 0 ; i < 10;  ){
          if( i === 5 ){
        continue;
    }
      document.write( i + '<br>' );
      i++;
  }

按for的執(zhí)行順序執(zhí)行到5的時候先執(zhí)行 var 再執(zhí)行 下面循環(huán)體 到 i = 5 的時候會跳循環(huán)體俺附,執(zhí)行括號里的 變化語句 (這里沒有變化) i 一直是 5 一直做這循環(huán),進入死循環(huán)溪掀;


雙層for

例:

  for( var i = 0; i < 5; i++ ){
        for( var j = 0 ; j < 4 ; j++){
              alert( '阿里' );
      }
  }

當 i = 0 時昙读,里面的j執(zhí)行 4次 0 1 2 3;
當 i = 1 時膨桥,里面的j執(zhí)行 4次 0 1 2 3;
當 i = 2 時唠叛,里面的j執(zhí)行 4次 0 1 2 3只嚣;
當 i = 3 時,里面的j執(zhí)行 4次 0 1 2 3艺沼;
當 i = 4 時册舞,里面的j執(zhí)行 4次 0 1 2 3;

會彈出 20次的 阿里

利用打印日志形式: (ie8用以下不兼容障般,調(diào)試后記得刪掉)

     for( var i = 0; i < 5; i++ ){
           for( var j = 0 ; j < 4 ; j++){
           console.log( 'i = ' + i + '    j = '+j )
            }
        }
1

for循環(huán)的優(yōu)化

for 最消耗性能

給50個LI設置背景
<script>
        aLi = document.getElementsByTagName( 'li' );
        console.time( 1 );
        for(var i=0 ; i<aLi.length ; i++ ){ //這里每循環(huán)一次都要去 訪問 aLi.length 總的訪問了50次 就是與標簽打了50次交道
            aLi[i].style.backgroundColor = 'red';
        }
        console.timeEnd( 1 );//測試一下代碼執(zhí)行多少時間


        console.time( 2 );
        var length = aLi.length; //用一個變量把length存起來
        for(var i=0 ; i<length ; i++ ){//這里只要訪問上面的
            aLi[i].style.backgroundColor = 'red';
        }
        console.timeEnd( 2 );//測試一下代碼執(zhí)行多少時間
    </script>
下面執(zhí)行時間秒殺上面

實例:
點擊生成100個div

  <style type="text/css">
      ul li{
          float: left;
          list-style: none;
          width: 20px;
          height: 20px;
          background: red;
          margin: 10px 10px 0 0;
      }
  </style>
  <button>點擊生成100個</button>
  <ul></ul>

  <script>
    var aBtn = document.getElementsByTagName ( 'button' );
    var aUl = document.getElementsByTagName ( 'ul' );
        aBtn[0].onclick = function (){
          console.time(1)         //測試時間
          for( var i=0 ; i<100 ; i++){
                  aUl[ 0 ].innerHTML += '<li></li>';
             }   
          console.timeEnd(1)       //測試時間  可以測試出繪制100個盒子用了多久
          }

  </script>
2

可以看出瀏覽器繪制100個盒子用了 8ms

這個執(zhí)行過程是一個繪制等于瀏覽器繪制了100次调鲸,最好的方法先把所有的li放在js里的變量存起放起來,再統(tǒng)一一次性繪制挽荡;

  <script>
    var aBtn = document.getElementsByTagName ( 'button' );
    var aUl = document.getElementsByTagName ( 'ul' );
        aBtn[0].onclick = function (){
          var  str = '';          //定義一個空字符串
          console.time(1)         //測試時間
          for( var i=0 ; i<100 ; i++){
                 str += '<li></li>';
             }   
          aUl[ 0 ].innerHTML += '<li></li>';
          console.timeEnd(1)       //測試時間  可以測試出繪制100個盒子用了多久
          }
2

從而看出:最好放在在js里的變量然后再統(tǒng)一一次性繪制出來藐石,減少一直修改頁面的東西;消耗性能定拟;


實例:
繪制出下面的圖片


3
<style type="text/css">
ul li{
    list-style: none;
    width: 50px;
    height: 50px;
    background: red;
    line-height: 50px;
    text-align: center;
    font-weight: bold;
    color: white;
}
ul{
    padding: 0;
    border: 1px dashed #000;
}
</style>
</head>
<body>
    <button>點擊生成100個</button>
    <ul></ul>
  <script type="text/javascript">
    var aBtn = document.getElementsByTagName ( 'button' );
    var aUl = document.getElementsByTagName ( 'ul' );
        aBtn[0].onclick = function (){
            console.time(1);
            var str = '';
            var num = 9;  //這里用定義長度 為了擴展  這個是奇數(shù)的算法
            for( var i=0 ; i<num ; i++){
                var mLeft = i <=num/2 ? i*50 : ( num-i-1 )*50; //判斷中間折回來用哪個計算方法
                str += '<li style="margin-left:' + mLeft +'px">' + i + '</li>'; //利用margin-left來改變盒子的位置
            }
            aUl[0].innerHTML = str;
            console.timeEnd(1);
        }
</script>

上面margin-left的算法


margin-left算法
<style type="text/css">
ul{ 
    position: relative;
    padding: 0;
    margin: auto;
    border: 1px dashed #000;
}

ul li{
    position: absolute;
    list-style: none;
    width: 50px;
    height: 50px;
    background: red;
    line-height: 50px;
    text-align: center;
    font-weight: bold;
    color: white;
}

  </style>
  </head>
  <body>
      <button>點擊生成100個</button>
      <ul>
  <!--        <li></li> 
   <li></li> 
   <li></li>  -->
</ul>
<script type="text/javascript">
    var aBtn = document.getElementsByTagName ( 'button' );
    var aUl = document.getElementsByTagName ( 'ul' );
        aBtn[0].onclick = function (){
            console.time(1);
            var str = '';
            var num = 5;  //這里用定義長度 為了擴展  這個是奇數(shù)的算法
            aUl[0].style.width = (num/2+0.5)*50 + 'px';
            aUl[0].style.height = num*50 + 'px';
            for( var i=0 ; i<num ; i++){
                var mLeft = i <=num/2 ? i*50 : ( num-i-1 )*50; //判斷中間折回來用哪個計算方法
                str += '<li style="right:' + mLeft +'px;'+ 'top:' + i*50 +'px;">' + i + '</li>'; //利用定位right  top來改變盒子的位置
            }

            aUl[0].innerHTML = str;
            console.timeEnd(1);

        }
</script>

效果


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末于微,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌株依,老刑警劉巖驱证,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異恋腕,居然都是意外死亡抹锄,警方通過查閱死者的電腦和手機算谈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門偎球,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蚓挤,你說我怎么就攤上這事商源〕捣荩” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵牡彻,是天一觀的道長扫沼。 經(jīng)常有香客問我,道長庄吼,這世上最難降的妖魔是什么缎除? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮总寻,結(jié)果婚禮上器罐,老公的妹妹穿的比我還像新娘。我一直安慰自己渐行,他們只是感情好轰坊,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著祟印,像睡著了一般肴沫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蕴忆,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天颤芬,我揣著相機與錄音,去河邊找鬼套鹅。 笑死站蝠,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的卓鹿。 我是一名探鬼主播菱魔,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吟孙!你這毒婦竟也來了豌习?” 一聲冷哼從身側(cè)響起存谎,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎肥隆,沒想到半個月后既荚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡栋艳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年恰聘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吸占。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡晴叨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出矾屯,到底是詐尸還是另有隱情兼蕊,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布件蚕,位于F島的核電站孙技,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏排作。R本人自食惡果不足惜牵啦,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望妄痪。 院中可真熱鬧哈雏,春花似錦、人聲如沸衫生。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽罪针。三九已至盹愚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間站故,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工毅舆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留西篓,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓憋活,卻偏偏與公主長得像岂津,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子悦即,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348