1. 程式人生 > >JavaScript複習筆記(二)函式與分支結構

JavaScript複習筆記(二)函式與分支結構

1、函式: 封裝一個專門任務的步驟清單的程式碼段叫做函式

使用函式: 宣告 定義 和呼叫

2、宣告和定義函式的幾種方法

函式宣告function sum(a,b){ return a+b}

函式表示式var sum = function(a,b){return a+b}

Function建構函式從技術角度講,這是一個函式表示式

var sum = new Function('a','b','return a+b')//不推薦使用,影響函式解析效能

3、函式宣告提前:在程式執行前或函式被呼叫前,將function宣告的函式提前到*當前作用域*的頂部集中建立

當使用function sum(a,b){ return a+b}時,整體全部提前,因為這個式子叫做函式宣告

當使用var sum = function(a,b){return a+b}時,僅 var sum提前到當前作用域的頂部,

sum = function(a,b){return a+b}留在原地

4、①如何呼叫函式:[var 返回值=]函式名([引數值列表]);函式只有呼叫時才執行!

反覆呼叫,會反覆執行相同操作!

②引數

引數變數:function 函式名(形參1,形參2,...)

傳遞引數值:呼叫時: 函式名(實參1,實參2,...)

一般值的個數和順序,應與宣告時的引數列表一致

③返回值:方法呼叫後,返回的執行結果!——1個數據

函式體中:return 要返回的資料;

      函式僅負責返回值,不負責儲存返回值!

如何獲得返回值:呼叫時:var 變數=函式名();

5、變數與變數作用域

1)變數作用域:一個變數的可用範圍

js中2種作用域:

       全域性作用域:一個變數可以在程式的任何位置被訪問。

       函式作用域:一個變數僅能在函式呼叫時,內部被訪問

2)js中2種變數:

①全域性變數:定義在全域性作用域中的變數

       1. 直接在任何函式外宣告的變數,全域性變數都屬於window——全域性物件

       2. 無論在任何(包括函式內)位置,為從未宣告過的變數賦值時,自動在全域性建立同名全域性變數!

② 區域性變數:定義在函式作用域中的變數

        1. 在函式定義內部宣告的變數

        2. 引數變數天生就是區域性變數

*在函式外的for迴圈中定義的變數也屬於全域性變數*

6、 函式的定義和呼叫過程:

  ① 宣告和定義函式時:

   window中建立了函式名變數,window外建立了函式定義的物件-->封裝函式的定義

       函式名變數中儲存了指向函式物件的地址

   ② 呼叫時,建立區域性變數:內部宣告的變數和引數變數

   ③ 呼叫過程中,如果區域性有,就不用全域性的, 如果區域性沒有,才會用全域性的

                  如果全域性也沒有,則會報錯!

④ 呼叫結束後,釋放所有區域性變數!

 

7、JavaScript全域性函式

8、分支結構1:if else

   程式結構3大類:

      順序:程式預設都是從上向下逐行執行

      分支:根據條件判斷的結果,有選擇的執行不同程式碼段

      迴圈:程式可以反覆執行同一程式碼段,到達臨界時退出

 

①if結構: 1件事  滿足條件就執行,否則不執行

       語法:if(條件){

滿足條件才執行的程式碼段

             }

②if...else...結構: 2件事 滿足條件執行if中的程式碼段,不滿足條件執行else中程式碼段

       語法: if(條件){

    滿足條件才執行的程式碼段

             }else{

不滿足條件才執行的程式碼段

             }

③else if結構:多件事,根據條件,多選*一*執行!

       語法:if(條件1){

滿足條件1才執行的程式碼段1

             }else if(條件2){

        ... ...

             }[else{

萬一之前所有條件都不滿足,才執行預設程式碼段  }]

④ 分支結構 與 三目/短路 效能比較

     如果只是返回值-->三目/短路          如果操作複雜-->分支結構

9、分支結構2:switch case   根據不同條件執行不同的程式碼段

用switch中的表示式的值和case中的值做*全等*比較,case 後面只能跟一個確定值

①語法:switch (表示式){

     case 值1:

 程式碼段1(break);

         case 值2:

     程式碼段2(break);

             ...

          [default:

預設程式碼段;]

         }

break: 停止當前結構的執行,並跳出當前結構,如果想要正常執行switch case結構,就必須在每個程式碼段結束時加上break

② switch 與 else if比較

      switch: 只能做全等比較,條件是全等比較時,首選switch case

      else if: 定義條件靈活,常用,可完全替代switch

③案例:  var a=3;

switch(a){

    case 2:

  console.log("a=2");

case 3:

  console.log("a=3");

case 4:

  console.log("a=4");

    default:                          // 輸出結果是: a=3  a=4 都不是

  console.log("都不是");      // 原因:沒有寫break,導致程式在跳轉到對應的

}                                          //程式碼塊後,無法停止,只能一直執行,直到switch結束  

10、迴圈結構:讓程式反覆執行一段程式碼段,只有達到臨界條件時,才停止迴圈

①迴圈3要素:

      1. 迴圈條件:繼續迴圈的條件:迴圈次數<6

      2. 迴圈變數:在迴圈條件中,用作比較的變數:迴圈次數

          迴圈變數一般會向著不滿足迴圈條件的趨勢不斷變化

      3. 迴圈體:反覆執行的程式碼段

②while迴圈:

     語法:var 迴圈變數=初值;

            while(迴圈條件){

          迴圈體;

            迭代變化迴圈變數;

            }

③do while迴圈:

     語法:var 迴圈變數=初值;

            do{

          迴圈體;

            迭代變化迴圈變數;

            }while(迴圈條件);

④while與do while差別:

當第一次條件滿足時,while和do while完全一樣!

當第一次條件就不滿足時, do while:至少會執行一次,  while: 一次都不執行!

用do while代替while的場景:哪怕第一次條件都不滿足,至少也能執行一次

⑤for迴圈:

語法:

for(var 迴圈變數=初值;迴圈條件;迭代變化迴圈變數){迴圈體;}

何時使用:只要迴圈變數的變化規律固定!優先選擇for迴圈

⑥for 、  while 和 do while 的本質

四大要素編號  1、var 迴圈變數=初值,2、迴圈條件,3、迭代變化迴圈變數4、迴圈體

for結構圖      for(1;2;3){4}

while結構圖    1  while(2){4;3}

do while結構圖  1  do{4;3}while(2)

所以for 、while 和 do while的本質都是相同的,都由四要素組成,都可相互替代

⑦退出迴圈

   退出本輪迴圈continue: 結束本輪迴圈,繼續下一輪迴圈

       continue一般都可以使用否定條件代替!

   退出迴圈結構:2種方式:

        1. 自然退出:不滿足迴圈條件時,自動退出迴圈

        2. 手動退出:程式設計師在迴圈體中用break強行退出迴圈