JS基礎--函式
阿新 • • 發佈:2020-12-13
嗨!我是前端小M~
Function(函式)
函式有什麼作用呢?
- 重用 (多次呼叫 提高效率)
- 維護(方便維護)
- 引數(修改引數)
- 返回值(結果)
函式三要素:功能,引數,返回值
如何建立函式呢?
1.宣告式 function fn(){ } fn(); //可進行預解析 可以先呼叫在宣告,也可以先宣告在呼叫
2.表示式 let fn = function(){ } //不能預解析 fn();
3.建構函式 let foo = new Function(){ } foo();
大家不要忘記呼叫函式哦,因為函式只有呼叫才能被執行
匿名函式 function(){} 沒有命名的函式,通常用在callback裡面
(function(){
})();
IIFE立即執行函式
函式引數
- 形參(形式引數)
- 實參 (實際引數)
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);