JavaScript高级语法之一等公民——函数(高阶函数)

简介: JavaScript高级语法之一等公民——函数(高阶函数)

JavaScript中一等公民 —— 函数

在JavaScript中,函数是非常重要的,并且是一等公民。所谓的一等公民到底是什么呢?


首先,函数的使用是非常灵活的;

其次函数可以作为另外一个函数的参数;

最后函数也可以终作为一个函数的返回值使用。(高阶函数)


接下来就展示一下函数的灵活性。


1.函数作为参数使用

// 将函数做为另一个函数的参数
function foo (a) {
   a()
}
function fn () {
    console.log('fn')
}
foo(fn) //将函数fn 作为函数foo的参数使用   输出结果为 fn

上面展示了一个最简单的使用,供大家参考理解,接来下展示一个小案例,示例代码如下:

// 创建一个calc函数,前两个参数为数字,第三个参数为计算函数 (名称顺序均为自定义)
function calc (num1, num2, calcFn) {
    console.log(calcFn(num1, num2))
}
// 创建一个加法函数
function add (num1, num2) {
    return num1 + num2
}
// 创建一个减法函数
function sub (num1, num2) {
    return num1 - num2
}
// 创建一个乘法函数
function mul (num1, num2) {
    return num1 * num2
}
var a = 20
var b = 30
// 调用calc函数传递不同的函数作为第三个参数,进行不同的方法计算,得到不同的输出结果
calc(a, b, add) // 50
calc(a, b, sub) // -10
calc(a, b, mul) // 600

2.函数作为返回值使用

众所周知,JS语法是允许在函数内部再定义函数的。

如下展示一个通俗易懂的小demo进行展示函数作为返回值的使用,示例代码如下:

// 在foo函数中嵌套一个bar函数
function foo () {
    function bar () {
        console.log('bar')
    }
    return bar // bar函数做为foo函数的返回值使用
}
var fn = foo()
fn() // bar

变量fn被赋值后就指向于foo函数中的bar函数,所以对fn()进行调用的到bar函数的打印结果

接着展示一个稍微有一丢丢绕的小demo(其实一点都不绕),示例代码如下:

// add函数作为makerAdder函数的返回值使用, makeAdder函数接收一个count的参数
function makeAdder (count) {
  // add函数接收一个num的参数,返回count与num的和
    function add (num) {
        return count + num
    }
    return add
}
var add5 = makeAdder(5)  //  此时的add5 意味着等于 函数makeAdder中的函数add
console.log(add5(6)) // 11 
console.log(add5(10)) // 15

这里给补充一个高阶函数的定义 :把一个函数如果接收另一个函数作为参数,或者该函数会返回另个一个函数作为返回值的函数,那么这个函数就称之为高阶函数。

所以上面的两个知识点所展示的代码都可以称为高阶函数。

目录
相关文章
|
23小时前
|
JavaScript 前端开发
JavaScript高级四、高阶技巧
JavaScript高级四、高阶技巧
|
2天前
|
JavaScript 前端开发
在JavaScript中,函数原型(Function Prototype)是一个特殊的对象
JavaScript中的函数原型是一个特殊对象,它为所有函数实例提供共享的方法和属性。每个函数在创建时都有一个`prototype`属性,指向原型对象。利用原型,我们可以向所有实例添加方法和属性,实现继承。例如,我们定义一个`Person`函数,向其原型添加`greet`方法,然后创建实例`john`和`jane`,它们都能调用这个方法。尽管可以直接在原型上添加方法,但推荐在构造函数内部定义以封装数据和逻辑。
8 2
|
4天前
|
前端开发 JavaScript 数据处理
在JavaScript中,异步函数是指什么
【5月更文挑战第9天】JavaScript中的异步函数用于处理非立即完成的操作,如定时器、网络请求等。它们可通过回调函数、Promise或async/await来实现。示例展示了如何使用async/await模拟网络请求:定义异步函数fetchData返回Promise,在另一异步函数processData中使用await等待结果并处理。当fetchData的Promise解析时,data变量接收结果并继续执行后续代码。注意,调用异步函数不会阻塞执行,而是会在适当时间点继续。
10 0
|
4天前
|
自然语言处理 JavaScript 前端开发
在JavaScript中,this关键字的行为可能会因函数的调用方式而异
【5月更文挑战第9天】JavaScript中的`this`关键字行为取决于函数调用方式。在非严格模式下,直接调用函数时`this`指全局对象,严格模式下为`undefined`。作为对象方法调用时,`this`指向该对象。用`new`调用构造函数时,`this`指向新实例。通过`call`、`apply`、`bind`可手动设置`this`值。在回调和事件处理中,`this`可能不直观,箭头函数和绑定方法可帮助管理`this`的行为。
10 1
|
4天前
|
JavaScript 前端开发 网络架构
JavaScript中的箭头函数是一种新的函数表达形式
【5月更文挑战第9天】JavaScript的箭头函数以简洁语法简化函数定义,其特性包括:1) 不绑定自身this,继承上下文的this,适合回调和事件处理;2) 没有arguments对象,需用剩余参数语法访问参数;3) 不能用作构造函数,无new调用;4) 没有prototype属性,不支持基于原型的继承。箭头函数在特定场景下优化了this处理,但使用时要注意与普通函数的差异。
8 2
|
5天前
|
前端开发 JavaScript 索引
CSS常见用法 以及JS基础语法
CSS常见用法 以及JS基础语法
12 0
|
7天前
|
JavaScript 前端开发
js的一些内置函数
js的一些内置函数
7 1
|
7天前
|
JavaScript 前端开发 索引
js的includes函数
js的includes函数
12 1
|
14天前
|
存储 移动开发 JavaScript
学习javascript,前端知识精讲,助力你轻松掌握
学习javascript,前端知识精讲,助力你轻松掌握