1. 程式人生 > 實用技巧 >JS基礎--函式

JS基礎--函式

嗨!我是前端小M~

Function(函式)

函式有什麼作用呢?

  1. 重用 (多次呼叫 提高效率)
  2. 維護(方便維護)
  3. 引數(修改引數)
  4. 返回值(結果)

函式三要素:功能,引數,返回值

如何建立函式呢?

1.宣告式  function fn(){
         }
         fn();           //可進行預解析  可以先呼叫在宣告,也可以先宣告在呼叫

  

2.表示式 let fn = function(){
        }                //不能預解析
        fn();       

  

3.建構函式 let foo = new Function(){
          }
          foo();     

  大家不要忘記呼叫函式哦,因為函式只有呼叫才能被執行

匿名函式 function(){} 沒有命名的函式,通常用在callback裡面

(function(){
})();

IIFE立即執行函式

函式引數

  1. 形參(形式引數)
  2. 實參 (實際引數)
    let foo = function(a,b){     //(a,b)就是接收實參的形參
       console.log(`我是${a},我喜歡吃${b}`)  //我是張三,我喜歡吃蝦條       我是王五,我喜歡吃麵條
    }
    let result1 =foo(張三,蝦條);//(張三,蝦條)就是傳入的實參
    let result2 =foo(王五,麵條);
    

3.函式返回值 return, 當函式呼叫完後,重新拿個變數儲存,在函式外邊能使用作用域內部的結果

return後面的語句不會被執行(類似break),每次只能返回一個值

Math.random()  數字隨機數  [0,1)
let createRandom = function (min, max) {
     if (!max) {
       [min, max] = [0, min]
    }
    let number = parseInt(Math.random() * (max - min + 1) + min);
    return number;  //傳入引數,返回結果
}
 createRandom(5,20);   //直接引用 

函式的方法

1)arguments[index]偽陣列物件儲存實參 //偽陣列不能使用陣列方式

let fn = function (x) {
    console.log(x);               //a
    console.log(arguments[0]);    //a
    console.log(arguments[1]);    //b
    console.log(arguments[2]);    //1
}
fn("a", "b", 1)

2)預設引數 (有實參就不列印預設引數)

let fn = function(x="nihao",y=12){
    console.log(x);
}
let result1 = fn();       //沒實參列印nihao  12
let result2 =fn("buhao",45); //有實參列印buhao 45
當只傳入一個實參,其他形參沒有接收值時,我們不想列印undefi就設定預設值

3)不定引數||剩餘引數||reset引數(...), 接收多餘的沒有形參的實參,是陣列

  不定引數只能寫在形參最後
 function fn(x,...reset){
  console.log(x,reset);  //12 [ 'a', 'b', true, 12 ]
}
fn(12,"a","b",true,12) 

4)解構 保證等號(=)左右兩邊相同的資料型別,把複雜資料型別的值拆開

 1)function fn([a,b]) {
    console.log(a,b);   //1  2 由外傳裡
    }
    fn([1,2]);
   2)let fn =function(){
    let a=1,b=2;
    return [a,b];
    }
    let [x,y] = fn();
    console.log(x,y);   // 1  2  由裡傳外
    可用於陣列交換

5)箭頭函式

1)只有一個return語句,return關鍵字省略,{}省略
  let fn = ()=>{
  return a-b;       =========>         let fn = ((a-b)=>a-b);
  }
  
2)如果有且僅有一個形參()省略
 function fn(){};    
 let fn = function(){};    =========>  let fn = str=>{}
3)沒有自己的this屬性,捕獲其所在的上下文的this值

6)callback回撥函式

  將函式A當作引數傳給函式B,在函式B中執行,函式A就是回撥
   (arr (sort,every,some,filter,map,forEach))
   function fn1(){
    console.log(`callback`);    //callback
}
   function fn2(a){
    a();
    console.log(a);            //Function:fn1
}
   fn2(fn1);

7)遞迴 (遞迴函式)(函式直接或間接呼叫自己,就是遞迴)

1.function fn(){
    fn();     ===========> 死迴圈 Maximum call stack size exceeded  所以要設定出口
}
fn();

  

2.function fn(num) {
    console.log(num);
    if (num === 0) {
        return;
    }
    fn(num-1);      =============> 設定出口 //4 3 2 1 0
}
fn(4);