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知识库 -> 高阶函数(Higher-order function) -> 正文阅读

[JavaScript知识库]高阶函数(Higher-order function)

高阶函数

什么是高阶函数

  • 高阶函数(Higher-order funciton)
    • 可以把函数作为参数传递给另一个函数
    • 可以把函数作为另一个函数的返回结果
  • 函数作为参数
// 模拟forEach
function forEach(arr, callback) {
    for (let i = 0; i < arr.length; i++) {
        callback(arr[i], i)
    }
}

const arr = ['张三', '里斯', '卫庄']

forEach(arr, function(item, i) {
    console.log(item, i) 
    // 张三 0
    // 里斯 1
    // 卫庄 2
})

// 模拟filter
function filter(arr, callback) {
    const result = []
    for (let i = 0; i < arr.length; i++) {
        if (callback(arr[i])) {
            result.push(arr[i])
        }
    }
    return result
}

const res = filter(arr, item => {
    if (item === '卫庄') return item
})
console.log(res) // [ '卫庄' ]
  • 作为返回值
function once(fn) {
    let done = false
    return function() {
        if (!done) {
            done = true
            return fn.apply(this, arguments)
        }
    }
}

const pay = once(function(menoy) {
    console.log(menoy)
})

// 只执行一次
pay(5)
pay(5)

常用高阶函数

  • forEach
  • map
  • filter
  • every
  • some
  • find/findIndex
  • reduce
  • sort
// 模拟Array.prototype.map()
const map = (array, callback) => {
    const result = []
    for (let value of array) {
        result.push(callback(value))
    }
    return result
}

const arr = [1, 3, 4, 5, 9]
const result = map(arr, v => v * v)
console.log(result) // [ 1, 9, 16, 25, 81 ]

// 模拟Array.prototype.every()
const every = (array, callback) => {
    let result = true
    for (let value of array) {
        result = callback(value)
        if (!result) break
    }
    return result
}

const arr1 = [10, 31, 3, 21]
const result1 = every(arr1, v => v > 10)
const result2 = every(arr1, v => v > 1)
console.log(result1) // false
console.log(result2) // true

// 模拟Array.prototype.some()
const some = (array, callback) => {
    let result = false
    for (let value of array) {
        result = callback(value)
        if (result) break
    }
    return result
}
const arr2 = [1, 3, 5]
const result3 = some(arr1, v => v % 2 === 0) // true
const result4 = some(arr2, v => v % 2 === 0) // false

// 模拟Array.prototype.find()
const find = (array, callback) => {
    let result
    for (let value of array) {
        if (callback(value)) {
            result = value
        }
    }
    return result
}

const arr = ['javascript', 'vue', 'react', 'typescript']
const res = find(arr, v => v === 'vue')
console.log(res)

// 模拟Array.prototype.findIndex()
const findIndex = (array, callback) => {
    let index
    for (let i in array) {
        if (callback(array[i])) {
            index = i
        }
    }
    return index
}
const res = findIndex(arr, v => v === 'vue')
console.log(res) // 1

// 模拟reduce
const reduce = (array, callback, initVal) => {
    let initValue = initVal || 0
    for (let i = 0; i < array.length; i++) {
        initValue = callback(initValue, array[i], i, this)
    }
    return initValue
}
const res = reduce([1,2,3,4], (prev, item) => prev + item)
console.log(res) // 10
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-19 11:53:09  更:2022-05-19 11:53:17 
 
开发: 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年11日历 -2024/11/23 20:13:44-

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