亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript函數(shù)式編程示例分析

 更新時(shí)間:2022年10月18日 08:33:14   作者:愛思考的豬  
函數(shù)式編程是一種編程范式,將整個(gè)程序都由函數(shù)調(diào)用以及函數(shù)組合構(gòu)成。 可以看成一條流水線,數(shù)據(jù)可以不斷地從一個(gè)函數(shù)的輸出流入另一個(gè)函數(shù)的輸入,最后輸出結(jié)果

函數(shù)式編程

1.函數(shù)式編程指的是函數(shù)的映射關(guān)系

2.vue3、react16.8的函數(shù)組件推動(dòng)了前端函數(shù)編程

3.必須是純函數(shù)(冪等):同樣的輸入有同樣的輸出

//非純函數(shù)
function getFirst1(arr){
  return arr.splice(0,1);
};
//純函數(shù)
function getFirst2(arr){
  return arr.slice(0,1);
};
const arr = [1,2,3,4,5];
getFirst1(arr);//[1] getFirst1(arr);//[2]
getFirst2(arr);//[1] getFirst1(arr);//[1]

再來看一組純函數(shù)和非純函數(shù)的例子

//非存函數(shù)
const avaliableVersion = 16.8;
function checkVersion(version){
 return version >= avaliableVersion;
};
//純函數(shù)
function checkVersion(version){
 return version >= 16.8;
};

由于前面的函數(shù)依賴了外部的(環(huán)境)變量,當(dāng)avaliableVersion這個(gè)外部變量發(fā)生變化的時(shí)候輸出結(jié)果也會(huì)變化,將avaliableVersion在函數(shù)內(nèi)部固定寫死就使得這個(gè)函數(shù)成為純函數(shù)了,但是這樣有一個(gè)致命的弊端就是寫出來的代碼不夠靈活沒有拓展性,使用函數(shù)柯理化能有效解決這個(gè)問題。

函數(shù)柯理化(Curring)

柯理化能做到函數(shù)的預(yù)加載

//普通函數(shù)
const add = (x,y)=>x+y;
//柯理化后
const curringAdd = x => (y=>x+y);
const add2 = curringAdd(2);
const add3 = curringAdd(3);
console.log(add2(1),add3(1));//3,4

函數(shù)柯理化也有一個(gè)弊端就是函數(shù)層層嵌套,像包心菜一樣,于是又出現(xiàn)了compose(組合)用來解決這個(gè)問題。

Compose

const compose = (f1,f2)=>(x=>f1(f2(x)));
const add2 = x=> x+2;
const mult5 = x=>x*5;
const.log(compose(mult5,add2)(2));

場(chǎng)景案例

如何在不知道數(shù)組長度的情況下獲取數(shù)組的最后一個(gè)元素? 這道題的其中一個(gè)解題方法是先把數(shù)組reverse再取值

  //常規(guī)寫法
  function getFirst(arr){
      return arr.reverse()[0];
    };
  //使用compose 1.倒置數(shù)組 2.取數(shù)組的第一項(xiàng)
  const reverse = arr => arr.reverse();
  const getFirstFromArray = arr => arr[0];
  console.log(compose(getFirstFromArray, reverse)([1, 2, 3, 4, 5]));//5,4,3,2,1

總結(jié)

1.必須是純函數(shù)

2.函數(shù)式編程需要結(jié)合Curring和Compose使用

3.函數(shù)編程的優(yōu)點(diǎn)有(1).代碼更穩(wěn)定更獨(dú)立,更有利于單測(cè)和tree shaking.(2).更接近原生js。

到此這篇關(guān)于JavaScript函數(shù)式編程示例分析的文章就介紹到這了,更多相關(guān)JS函數(shù)式編程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 改變layer confirm彈窗按鈕的顏色方法

    改變layer confirm彈窗按鈕的顏色方法

    今天小編就為大家分享一篇改變layer confirm彈窗按鈕的顏色方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • JavaScript詞法作用域與調(diào)用對(duì)象深入理解

    JavaScript詞法作用域與調(diào)用對(duì)象深入理解

    關(guān)于 Javascript 的函數(shù)作用域、調(diào)用對(duì)象和閉包之間的關(guān)系很微妙,關(guān)于它們的文章已經(jīng)有很多,本文做了一些總結(jié),需要的朋友可以參考下
    2012-11-11
  • 前端深入理解Typescript泛型概念

    前端深入理解Typescript泛型概念

    這篇文章主要介紹了前端深入理解Typescript泛型概念,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 微信小程序?qū)崿F(xiàn)手勢(shì)滑動(dòng)卡片效果

    微信小程序?qū)崿F(xiàn)手勢(shì)滑動(dòng)卡片效果

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)手勢(shì)滑動(dòng)卡片效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 談一談JS消息機(jī)制和事件機(jī)制的理解

    談一談JS消息機(jī)制和事件機(jī)制的理解

    消息/事件機(jī)制是幾乎所有開發(fā)語言都有的機(jī)制,并不是deviceone的獨(dú)創(chuàng),在某些語言稱之為消息(Event),有些地方稱之為(Message).接下來通過本文給大家介紹JS事件和消息機(jī)制的理解 ,需要的朋友一起學(xué)習(xí)吧
    2016-04-04
  • js實(shí)現(xiàn)坦克大戰(zhàn)游戲

    js實(shí)現(xiàn)坦克大戰(zhàn)游戲

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)坦克大戰(zhàn)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • bootstrap響應(yīng)式導(dǎo)航條模板使用詳解(含下拉菜單,彈出框)

    bootstrap響應(yīng)式導(dǎo)航條模板使用詳解(含下拉菜單,彈出框)

    這篇文章主要為大家詳細(xì)介紹了bootstrap響應(yīng)式導(dǎo)航條模板使用詳解,含下拉菜單,彈出框效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • js自定義方法通過隱藏iframe實(shí)現(xiàn)文件下載

    js自定義方法通過隱藏iframe實(shí)現(xiàn)文件下載

    通過隱藏iframe實(shí)現(xiàn)文件下載,不可思議吧,但確實(shí)是可以實(shí)現(xiàn)的,不懂的看下代碼,或許可以幫助到你,而且此功能是用js實(shí)現(xiàn)的,感興趣的你可不要錯(cuò)過了哈
    2013-02-02
  • 超實(shí)用的javascript時(shí)間處理總結(jié)

    超實(shí)用的javascript時(shí)間處理總結(jié)

    在大家日常開發(fā)中常常會(huì)要對(duì)時(shí)間進(jìn)行處理,以達(dá)到大家想要的效果,所以本文整理了一些javascript常用的時(shí)間處理類,有需要的可以參考借鑒。
    2016-08-08
  • js實(shí)現(xiàn)盒子滾動(dòng)動(dòng)畫效果

    js實(shí)現(xiàn)盒子滾動(dòng)動(dòng)畫效果

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)盒子滾動(dòng)動(dòng)畫效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08

最新評(píng)論