js中回调函数的用法 回调函数js利用箭头函数


js中回调函数的用法 回调函数js利用箭头函数

文章插图
回调函数是每个前端程序员都应该知道的概念之一 。回调可用于数组、计时器函数、promise、事件处理中 。
本文将会解释回调函数的概念,同时帮你区分两种回调:同步和异步 。
回调函数首先写一个向人打招呼的函数 。
只需要创建一个接受 name参数的函数 greet(name) 。这个函数应返回打招呼的消息:
如果向很多人打招呼该怎么办?可以用特殊的数组方法 array.map()可以实现:
persons.map(greet)获取 persons数组的所有元素,并分别用每个元素作为调用参数来调用 greet()
函数:`greet(‘Cristina’), greet(‘Ana’) 。
有意思的是 persons.map(greet)方法可以接受 greet()函数作为参数 。这样 greet()就成了回调函数 。
persons.map(greet)是用另一个函数作为参数的函数,因此被称为高阶函数 。
回调函数作为高阶函数的参数,高阶函数通过调用回调函数来执行操作 。
重要的是高阶函数负责调用回调,并为其提供正确的参数 。
在前面的例子中,高阶函数 persons.map(greet)负责调用 greet()函数,并分别把数组中所有的元素 ‘Cristina’和 Ana ‘作为参数 。
这就为识别回调提供了一条简单的规则 。如果你定义了一个函数,并将其作参数提供给另一个函数的话,那么这就创建了一个回调 。
你可以自己编写使用回调的高阶函数 。下面是 array.map()方法的等效版本:
map(array,callback)是一个高阶函数,因为它用回调函数作为参数,然后在其主体内部调用该回调函数:callback(item) 。
注意,常规函数(用关键字 function定义)或箭头函数(用粗箭头 =>定义)同样可以作为回调使用 。
同步回调回调的调用方式有两种:同步和异步回调 。
同步回调是“阻塞”的:高阶函数直到回调函数完成后才继续执行 。
例如,调用 map()和 greet()函数 。
其中 greet()是同步回调 。
同步回调的步骤:
高阶函数开始执行:’map() starts’回调函数执行:’greet() called’最后高阶函数完成它自己的执行过程:’map() completed’同步回调的例子许多原生 JavaScript 类型的方法都使用同步回调 。
最常用的是 array 的方法,例如:
array.map(callback), array.forEach(callback), array.find(callback), array.filter(callback),
array.reduce(callback,init)
字符串类型的 string.replace(callback)方法也能接受同步执行的回调:
异步回调异步回调是“非阻塞的”:高阶函数无需等待回调完成即可完成其执行 。高阶函数可确保稍后在特定事件上执行回调 。
在以下的例子中,later()函数的执行延迟了 2 秒:
later()是一个异步回调,因为 setTimeout(later,2000)启动并完成了执行,但是 later()在 2 秒后执行 。
异步调用回调的步骤:
高阶函数开始执行:’setTimeout()starts’高阶函数完成其执行: ‘setTimeout() completed’回调函数在 2 秒钟后执行: ‘later() called’异步回调的例子计时器函数异步调用回调:
DOM 事件侦听器还异步调用事件处理函数(回调函数的子类型):
4.异步回调函数与异步函数在函数定义之前加上特殊关键字 async会创建一个异步函数:
fetchUserNames()是异步的,因为它以 async为前缀 。函数
await fetch(‘https://api.github.com/users?per_page=5′)从 GitHub 上获取前5个用户。然后从响应对象中提取 JSON 数据:awaitresp.json() 。
异步函数是 promise 之上的语法糖 。当遇到表达式 await<promise>(调用 fetch()会返回一个promise)时,异步函数会暂停执行,直到 promise 被解决 。


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: