JS高階函數(shù)2021-11-30

什么是高階函數(shù):就是一個函數(shù)的參數(shù)是函數(shù),或者返回值是函數(shù),滿足其中一個就是高階函數(shù)

開閉原則:對擴(kuò)展是開發(fā)的,對修改是封閉的

1.定義計算器方法

functioncalc(num1,num2,callback){

callback(num1,num2)

}

2.回調(diào)函數(shù)

輸出數(shù)組中所有的數(shù)

輸出數(shù)組中所有的奇數(shù)

輸出數(shù)組中所能被3整除的數(shù)

分析問題:都用到了for循環(huán)

定義一個通用的for方法:

functionbingFor(arr,callback){

for(leti=0;i<arr.length;i++){

if(callback(arr[i])){

console.log(arr[i]);

? ? ? ? ? ? ? ?}

? ? ? ? }

}

3.數(shù)組的高階方法

1.forEach()方法,用于循環(huán)遍歷整個數(shù)組

該方法的參數(shù)是一個回調(diào)函數(shù),回調(diào)函數(shù)可以傳兩個參數(shù),第一個參數(shù)是數(shù)組中的每一項(xiàng)元素,

第二個參數(shù)是每一項(xiàng)元素對應(yīng)的下標(biāo)。

注意:第二個參數(shù)可以省略。

案例:

?let arr = [11,22,33,44,55,66,77,88,99,111,222,333,444]

? ? ? ? arr.forEach((val,index)=>console.log(index+'-'+val))

2.filter()方法,用于過濾數(shù)組中的元素,返回過濾結(jié)果

?let arr1 = arr.filter(val => val % 2===0)

? ? ? ? console.log(arr1);

? ? ? ? let arr2 = arr.filter(val => val % 3===0)

? ? ? ? console.log(arr2);

3.find()方法,用于獲取數(shù)組中滿足規(guī)則的第一個元素

let num1 = arr.find(val=> val % 3===0)

? ? ? ? console.log(num1);

4.findIndex()方法,用于獲取數(shù)組中滿足規(guī)則的第一個元素下標(biāo)

let index1 = arr.findIndex(val => val % 3===0)

? ? ? ? console.log(index1);

5.some()方法,用于表示數(shù)組中是否有滿足指定規(guī)則的元素,有返回true,一個都沒有返回false

let isHave1 = arr.some(val => val>1000)

? ? ? ? console.log(isHave1);

? ? ? ? let isHave2 =arr.some(val => val===222)

? ? ? ? console.log(isHave2);

6.every()方法,用于表示數(shù)組中是否所有元素都滿足指定的規(guī)則

?let isHave3 = arr.every(val => val > 10)

? ? ? ? console.log(isHave3);

? ? ? ? let isHave4 = arr.every(val => val % 2 ===0)

? ? ? ? console.log(isHave4);

7.map()方法,用于將原始數(shù)組里面的數(shù)據(jù)根據(jù)指定的規(guī)則返回新的數(shù)組

let arr3 = arr.map(r=>r%7)

? ? ? ? console.log(arr3);

8.sort()方法,對數(shù)組的元素進(jìn)行排序

?let arr4 = [33,22,55,7,46]

?console.log(arr4);

? ? ? ? arr4.sort((a,b)=>a-b)

? ? ? ? console.log(arr4);

? ? ? ? arr4.sort((a,b)=>b-a)

? ? ? ? console.log(arr4);

9.回調(diào)函數(shù)需要傳兩個參數(shù),返回參數(shù)1-參數(shù)2是升序,返回參數(shù)2-參數(shù)1是降序

? let sum1 = arr4.reduce((a,b)=>{

? ? ? ? ? ? return a+b

? ? ? ? })

? ? ? ? console.log(sum1);

10.reduce()方法,統(tǒng)計數(shù)組中元素的值(從左到右)

?let sum2 = arr4.reduce((a,b)=>{

? ? ? ? ? ? return a+b

? ? ? ? },0)

? ? ? ? console.log(sum2);

11.reduceRight()方法,統(tǒng)計數(shù)組中元素的值(從右到左)

? let sum3 = arr4.reduceRight((a,b)=>{

? ? ? ? ? ? return a+b

? ? ? ? })

? ? ? ? console.log(sum3);

4.閉包函數(shù)

定義一個a方法,在a方法中定義一個b方法,并且b方法里面用到了a方法里面定義的變量,

那么此時就形成了閉包函數(shù)

由于內(nèi)部方法里面,用到外部方法里面的變量,外部方法里面的那個變量會一直在內(nèi)存中存保存著

總結(jié):兩個方法嵌套定義,里面的方法,用到了外面方法里面定義的變量,此時這兩個方法就形成了閉包。

閉包案例:計算機(jī):

functioncalc(n1,n2,type){

// 數(shù)據(jù)定義在函數(shù)里面,用參數(shù)傳值,保證了數(shù)據(jù)的安全性

letnum1=n1letnum2=n2

switch(type){

case'+':

return function(){

console.log(`${num1}+${num2}=${num1+num2}`);

}

case'-':

return function(){

console.log(`${num1}-${num2}=${num1-num2}`);

? ? ? ? ? ? ? ? }

? ? ? ?}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容