­

JavaScript中的函數

JavaScript中的函數

函數的定義: 函數就是JavaScript的基礎模組單元,包含一組語句,用於程式碼的復用,資訊隱藏 和 組合調用。 簡單點說:函數就是把任意的一段程式碼放在一個盒子裡面,在我想要執行這段程式碼的時候,直接執行這個盒子裡面的程式碼就行來

函數的創建和結構

1.函數的創建

在JavaScript語言中,可以通過一下三種方式創建:

  • 函數聲明

 //函數聲明式創建函數
function f1() {
    //需要編寫的程式碼
}
// function: 聲明函數的關鍵字,表示接下來是一個函數了
// f1: 函數的名字,我們自己定義的(遵循變數名的命名規則和命名規範)
// (): 必須寫,是用來放參數的位置(一會我們再聊)
// {}: 就是我們用來放一段程式碼的位置(也就是我們剛才說的 「盒子」)

  • 字面量方式創建(賦值式)

var f2 = function() {
   //需要編寫的程式碼
}
  • 使用Function構造函數創建(不推薦)

    var f3 = new Function('參數1','參數2',...,'函數要執行的程式碼')
   //構造函數的參數中最後一個參數為函數體的內容,其餘均為函數的形參

2.函數的調用

函數的調用實際上就是讓函數執行(使用函數裡面的程式碼)

函數調用 就是直接 寫 函數名() 就可以了

    f1();
   f2();
   f3();

˙注意: 定義一個函數以後,如果函數沒有調用,那麼寫在函數{}裡面的程式碼將沒有任何意義。

3.函數的結構

函數的一般表現形式為:

    //函數聲明
   function fn(參數[行參]){
       //函數體
  }
   fn(參數[實參])

函數包括一下4個部分:

  • 保留字:function

  • 函數名字:fn

  • 參數:圓括弧以及圓括弧裡面的參數

  • 函數體:花括弧以及花括弧裡面的語句

4.匿名函數

當聲明一個函數,沒有函數名的時候,那麼這個函數就稱之為匿名函數

    function() {
       //編寫的程式碼
  }

聲明式創建函數 和 賦值式創建函數的區別: 雖然兩種定義方式的調用方法都是一樣的,但是還是會村子啊一些區別的

  • 聲明式函數:調用可以在 定義之前 或者 定義之後調用

    //可以調用
   fn();

   //聲明式函數
   function fn(){
       console.log('我是婧婧')
  }

   //也可以調用
   fn()
  • 字面量賦值式函數:調用只能 在定義函數的後面

    //不可以調用(會報錯)
   fn();
   
   //賦值式函數
   var fn = function(){
       console.log('我是婧婧')
  }

   //可以調用
   fn();

函數的參數

  • 我們定義函數 和 調用函數都出現了 圓括弧()

  • 思考圓括弧()的作用?

  • 圓括弧就是我我們用來存放參數的位置

  • 參數又 分為: 行參 和 實參

    //聲明函數
   function fn(行參寫在這裡){

  }
   fn(實參寫在這裡))

1.行參 和 實參 的作用

  • 行參

    • 就是在函數內部可以使用的變數,在函數外部不可以使用

    • 沒定一個行參,就相當於在函數內部定義一個可以使用的變數

    • 參數 與 參數之間 用 逗號 分隔

        function fn(a,b,c){
           //相當於在函數內部定義了a b c 三個變數,我們可以直接在函數內部使用這個三個變數
          consoloe.log( a + b +c)
      }
    • 如果只有行參,沒有實參的話,那麼在函數內部使用這個變數式沒有值的,會得到一個undefined

    • 行參 的值 由 函數調用的時候的實參 來決定的

  • 實參

    • 在函數調用的時候給 行參 賦值

    • 也就是在調用函數的時候給一個具體的內容

        function fn(a,b,c){
           // 相當於在函數內部定義了a b c 三個變數,我們可以直接在函數內部使用這個三個變數
          consoloe.log( a + b +c)
      }
       fn(1,2,3)

       //這裡的行參為: a,b,c
       //這裡的實參為: 1,2,3
    • 當函數由多個參數的時候,行參 和 實參 式一一對應的

2. 參數個數的關係

函數調用時,會完成實際參數 對 形式參數的複製工作。 當實際參數的個數 和 形式參數 的 個數不匹配的時候 會導致運算錯誤

  • 行參 比 實參 少

    • 因為參數式按照順序一一對應

    • 行參 比 實參 少的時候,那麼行參 就拿不到多餘的 實參

        function fn(a,b){
           //函數內部可以使用a 和 b
      }

       //調用函數
       fn(1,2,3)

       //本次調用傳遞了 三個 實參: 1 , 2 ,3
       //1 對應的行參 為a,2對應的行參 為b,那麼 3 沒有跟它對應的行參,也就是函數內部沒有辦法已通過變數來使用3這個值
  • 行參 比 實參 多

    • 因為參數式按照順序一一對應

    • 所以多出來的行參就是沒有值的,就是 undefined

        function fn(num1, num2, num3) {
       // 函數內部可以使用 num1 num2 和 num3
      }

       // 本次調用的時候,傳遞了兩個實參,100 和 200
       // 就分別對應了 num1 和 num2
       // 而 num3 沒有實參和其對應,那麼 num3 的值就是 undefined
       fn(100, 200)
  • 函數的參數(arguments)

在函數的內部,我們總是可以獲得一個免費配送的arguments參數。 arguments用於接收函數調用時傳入的實際參數,它被設計成一個類似數組的結構,擁有length屬性,但是它不是一個真正的數組,所以不能使用數組對應的的方法。 arguments參數的存在,使得我們可以隨身一些無需指定行參個數的函數


function sum(){
   var sum = 0;
   var count = arguments.length;
   for(var i = 0;i < coung; i++){
       sum += arguments[i];
  }
   console.log(sum);
}





<script>
       /*
          在函數的內部有一個數據是可以不用定義就能使用的,那麼這個數據就是arguments
          arguments 表示函數所有實參的集合(偽數組,像數組的集合,但是並不是數組)
          arguments有一個屬性 length,表示的是函數 實參的個數

          每個實參在這個集合中都會有一個特定下標(索引),想要從這個集合中獲取實參,必須通過實參對應的索引來獲取,集合的索引是從0開始
          arguments[索引n] === 得到這個索引n對應的的數據
      */
       function sum() {
           // console.log(arguments[5]);
           // 從arguments集合中把每一個實參拿出來進行相加
           var sum = 0;
           // 通過for循環取出arguments結合中數據(函數的實參)
           for (var i = 0; i < arguments.length; i++) {
               // console.log(arguments[i]);
               // 把每一個實參相加
               sum += arguments[i]  
          }
           console.log(sum);
      }
       sum(1, 2, 3)
   </script>

函數的返回值(return)

  • 函數體中 return語句 給函數一個返回值 或者 終止函數的執行。

  • 當return 語句被執行時,函數立即返回而不在執行 剩餘的程式碼。

    //  終止函數的執行
   function fn() {
       console.log(1)
       console.log(2)
       console.log(3)
       
       // 寫了 return 以後,後面的 4 和 5 就不會繼續執行了
       return
       console.log(4)
       console.log(5)
  }

   // 函數調用
   fn()
  • return語句後面 跟上你要返回的數據(可以式一個表達式,可以式任意的數據類型)

    function fn() {
       // 執行程式碼
       return 100
  }

   // 此時,fn() 這個表達式執行完畢之後就有結果出現了
   console.log(fn()) // 100
  • 函數總是有一個返回值,如果函數體中沒有return語句或者return 後面為空,那麼函數將總式返回 undefined

    function fn() {
   // 執行程式碼
  }

   // fn() 也是一個表達式,這個表達式就沒有結果出現
   console.log(fn()) // undefined

函數的優點

函數就是對一段程式碼的封裝,在我們想要使用這段程式碼的時候調用

【1】封裝程式碼,是程式碼更加簡潔

【2】復用性更強,在實現重複功能的時候,只要直接調用封裝好的嗲嗎即可

【3】程式碼執行時機,隨時可以在我們想啊喲執行的時候去執行