javaScript之函數,分支結構 (一)

***函數:封裝一項任務的步驟清單的代碼段,再起一個任務名

    何時使用:發現一項任務,被反覆調用,要先將任務步驟封裝爲一個函數,再反覆調用

    如何聲明函數:

        function 任務名([參數變量類表]{

                   步驟清單代碼段

                   [return返回值]

         }

    如何調用函數:函數名([參數值類表])

    強調:

        1.函數只有被調用時纔會被執行

        2.函數可被反覆調用  --代碼重用


    參數變量:專門接收方法執行必須的數據變量

    何時使用:如果一個函數,必須提供指定數據,才能正常執行時,需要提供幾個數據,就定義幾個參數接收

    如何定義參數:不需要var,直接在函數名後的括號中定義參數名  --每個參數名之間用逗號分割

    何時,如何傳入參數值:調用時,按照參數定義的個數和順序傳入

    爲什麼使用參數:參數可讓方法變的更加靈活


***內存中函數的生命週期:

    1.定義時:將函數直接封裝在一個對象中保存 --函數對象

        ***函數名:其實是指向函數對象的一個變量

        ***定義時,不會讀取函數的內容

    2.調用時:在執行環境中增加一個當前函數的執行環境對象,纔會逐行讀取並執行函數的內容

    3.調用後:函數的執行環境和活動對象,彈出


***作用域:一個變量的可用範圍

    本質其實是一個存儲多個變量的對象

    2種:

        1.全局作用域:專門保存全局變量的對象

           全局變量:在任何時候,任何位置都可以被訪問

        2.函數作用域:專門保存函數內部的局部變量的對象   --活動對象

          局部變量:

                2類:

                    1.參數變量

                    2.在函數聲明的變量(var)

                --只在函數調用時的函數內部纔可以使用

筆試題:

例1:局部變量

var n=100;
function fun(n){
    n++;
    console.log(n);

}
fun(100);//101
console.log(n);//100

例2:使用全局作用域:

var n=100;
  function fun(){
      n++;
      console.log(n);
  }
//沒有自帶的n,到全局中找n,將n帶入,結果爲
  fun();//101
  console.log(n);//101


    返回值:函數調用的執行結果

    何時使用:只要函數的執行,需要明確的返回值結果時;要看調用者是否需要獲得執行結果

    如何定義返回值:在函數定義結尾:return 返回值

    如何獲得返回值:

                    調用時: var 變量=函數名(xxx);


    ***按值傳遞:兩變量間賦值或向函數中傳遞參數時,都是將原變量中的值複製一個副本給對方

        即:修改一方,另一方不熟影響


例1:

var n=100;
    var m=n;//按值傳遞:n將自己的值,複製一個副本給m,該m,不影響n,反之亦然
    n++;
    console.log(m);//100 兩個互不影響

例2:

function buy(card){
    card-=3;
    console.log(card);
}
var card=10;
buy(card);//7
console.log(card);//10


***聲明提前:在正式執行程序前,都會先預讀所以var 聲明的變量

function聲明的函數,集中到當前作用域的頂部集中聲明 ***賦值留在原地***


定義函數的第二種方式:

    var 函數名=function(參數){函數體;return 返回值}

                    =100

    例:

var fun;
    fun=function(){
        return 1;
    };
    console.log(fun());//1
fun=function(){
    return 2;
};
    console.log(fun());//2
    fun=100;
    console.log(fun);//100
    console.log(fun());//報錯


    第二種方法,函數定義不會被提前,僅函數名提前

    聲明函數,整體(函數名+函數定義)提前


 問題一:如果一個表達式或者函數有結果,就可直接當一個值用

 問題二:如果傳入參數個數不符,不會報錯;個數超了;多出的沒用;個數不夠,未接到值得參數變量,默認值undefined

 問題三:在函數內,爲沒聲明過的變量賦值,變量會被自動創建在全局 -->危險

    強烈建議:所有變量使用前,必須用var聲明

 問題四:return 特點:

    1.return 與返回值之間不能加回車

    2.return 不能放在其他表達式中間使用


*全局函數:ES標準中規定的,瀏覽器廠商已經實現的,不需要任何對象即可直接調用的函數

        干擾項:BOM,凡是在BOM階段講的都不是全局函數

        手冊中:JavaScript->JavaScript對象->jsfunctions


    encodeURI:對包含多字節符的url字符串編碼爲單字節符組成

    decodeURI:將encodeURI編碼後的字符串,解碼爲原文

  爲什麼:url不允許包含多字節字符:比如漢字

 

  問題:url還不允許包含保留的特殊符號:比如:/

  解決:encodeURIComponent/decodeURIComponent


    eval:專門執行字符串格式的js語句  --eval("alert(‘hello’)")

            還可計算字符串格式的表達式的值

    

    infinity:無窮的的意義

        除數爲0,(js中除數可以爲0),結果爲infinity,無窮大,可參與關係運算

        函數:isFinite(num):專門判斷一個數字是否在有效範圍內



*分支結構:

    程序分爲3種結構: 順序  分支  循環

    順序:除去聲明提前,其餘代碼默認都從上向下順序執行

    分支:根據不同的條件,執行不同的代碼

    循環:讓程序反覆執行一段相同代碼


    分支情況:3種情況:

        1.一個條件,一件事,滿足條件就做,不滿足就不做

            如果操作簡單:利用短路:條件&&(操作)

            如果操作複雜:if(條件){操作代碼}

                            //如果滿足條件,就執行操作

        2.一個條件,兩件事,就滿足條件做第一件事,不滿足做另一件事

            如果操作簡單:三目:條件1?操作1:操作2;

            如果操作複雜:if(條件){

                                                滿足才執行的代碼

                                                (如果前一個條件滿足,則不再繼續判斷)

                                                }else{

                                                不滿足才執行的代碼

                                                 }

            完整的分支結構,都是必須且只能多選一執行

        3.多個條件,多個事,多選一執行,可一件都不執行

            簡單操作:三目:條件1?操作1:

                                    條件2?操作2:

                                    條件3?操作3:

             如果複雜操作:if(條件1){

              操作1

                                           }elseif(條件2{

                                            操作2

                                            }elseif(條件3{

                                            操作3

                                            }elseif(條件4

                                            。。。。

                                                }

    強調:2點

    1.最後的else可省略,一旦所有條件都不能滿足,則什麼都不做

    2.條件可以任意關於運算或邏輯運算

        只要返回true和false的函數或表達式,都可當條件用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章