IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 函数式编码范式 -> 正文阅读

[JavaScript知识库]函数式编码范式

函数式编码范式

为什么要学函数式编程

  • 函数式编程是随着react的流行收到越来越多的关注
  • vue3也开始拥抱函数式编程
  • 函数式编程可以抛弃this
  • 打包过程可以更好的利用tree shaking 过滤无用代码
  • 方便测试、方便并行处理
  • 有很多库可以帮助我们进行函数式开发:lodash 、underscore、ramdo

什么是函数式编程

  • 函数式编程类似数学中的映射关系 例如 x=sin(x)
  • (纯函数)相同的输入始终有相同的结果
  • 有输入 有输出 而且相同的输入要有相同的输出

函数是一等公民

MDN First-class Function

  • 函数可以存储在变量中
  • 函数作为参数
  • 函数作为返回值

在javascript中 函数就是一个 普通的对象

高阶函数

什么是高阶函数
  • 高阶函数
    • 可以把函数作为参数传递给另一个函数
    • 可以把函数作为另一个函数的返回值
  • 函数作为参数
function forEach(array,fn){
    for(let i=0;i<array.length;i++){
        fn(array[i])
    }
}
let arr=[1,2,3]
function fn(item){
    console.log(item)
}

console.log(forEach(arr,fn))
  • 函数作为返回值
function once(fn){
    let done=false;
    if(!done){
        done= true;
        return fn.apply(this,arguments)
    }
}

let sleep=once(function(lazy){
    console.log(`睡了${lazy}`)
})

sleep(2)
sleep(2)
使用高阶函数的意义
  • 抽象可以帮我们屏蔽细节,只需要关注我们的结果(目标)
  • 高阶函数是用来抽象通用的问题

例如

? filter splice forEach 这种 我们只需要知道 返回的结果就行 不需要具体关注内部怎么实现

常用的高级函数

  • forEach
  • map
  • filter
  • every
  • some
  • find/findIndex
  • reduce
  • sort
  • reverse

//手写一个map
const maMap=(array,fn)=>{
    let result=[];
    for(let i=0;i<array.length;i++){
        result.push(fn(array[i]))
    }
    return result;
};

let arr=[1,2,3,4,5];

arr=myMap(arr,(item)=>item*2)

闭包

  • 闭包(Closure):函数和其周围的状态(词法环境)的引用捆绑在一起形成闭包。
    • 简单来说就是一个函数里面包含着另一个函数
    • 可以在一个作用域中调用另一个函数内部的函数 并 访问到该函数的作用域中的成员。

function add(){
    let sum=3;
    return function(){
        console.log(sum)
    }
}
//如果在return 的函数中没有使用到sum ,sum就会别释放掉
//如果用到了  就不会被释放回收

const fn=add();
fn()
  • 闭包的本质:函数在执行的时候会放到一个执行栈上,当函数执行完毕之后 会从执行栈中移除;但是堆栈上的作用域成员因为被外部引用不能释放,所以依然能被内部成员所访问到。
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-28 07:38:44  更:2021-07-28 07:39:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/5 20:50:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码