前端面试 75 道题,看完的人少之又少 (中)( 六 )
在JavaScript中函数也是对象的一种 , 同样对象可以作为参数传递给函数 , 因此函数也可以作为参数传递给另外一个函数 , 这个作为参数的函数就是回调函数 。
const btnAdd = document.getElementById('btnAdd');btnAdd.addEventListener('click', function clickCallback(e) {// do something useless});
在本例中 , 我们等待id为btnAdd的元素中的click事件 , 如果它被单击 , 则执行clickCallback函数 。 回调函数向某些数据或事件添加一些功能 。
数组中的reduce、filter和map方法需要一个回调作为参数 。 回调的一个很好的类比是 , 当你打电话给某人 , 如果他们不接 , 你留下一条消息 , 你期待他们回调 。 调用某人或留下消息的行为是事件或数据 , 回调是你希望稍后发生的操作 。
50. Promise 是什么?Promise 是异步编程的一种解决方案:从语法上讲 , promise是一个对象 , 从它可以获取异步操作的消息;从本意上讲 , 它是承诺 , 承诺它过一段时间会给你一个结果 。 promise有三种状态:pending(等待态) , fulfiled(成功态) , rejected(失败态);状态一旦改变 , 就不会再变 。 创造promise实例后 , 它会立即执行 。
fs.readFile('somefile.txt', function (e, data) {if (e) {console.log(e);}console.log(data);});
如果我们在回调内部有另一个异步操作 , 则此方法存在问题 。 我们将有一个混乱且不可读的代码 。 此代码称为**“回调地狱”** 。
// 回调地狱fs.readFile('somefile.txt', function (e, data) {//your code herefs.readdir('directory', function (e, files) {//your code herefs.mkdir('directory', function (e) {//your code here})})})
如果我们在这段代码中使用promise , 它将更易于阅读、理解和维护 。
promReadFile('file/path').then(data => {return promReaddir('directory');}).then(data => {return promMkdir('directory');}).catch(e => {console.log(e);})
promise有三种不同的状态:
- pending:初始状态 , 完成或失败状态的前一个状态
- fulfilled:操作成功完成
- rejected:操作失败
const myFirstPromise = new Promise((resolve, reject) => {setTimeout(function(){resolve("成功!");}, 250);});myFirstPromise.then((data) => {console.log("Yay! " + data);}).catch((e) => {...});
作者:Mark A 译者:前端小智 来源:dev【前端面试 75 道题,看完的人少之又少 (中)】原文:#1-whats-the-difference-between-undefined-and-null
- 三年Java开发,刚从美团、京东、阿里面试归来,分享个人面经
- java面试题整理
- 面试官:问你一个,Spring事务是如何传播的?
- 程序员面试主要看哪些 该怎么准备面试内容
- 震惊!京东T4大佬面试整整三个月,才写了两份java面试笔记
- 2020金九银十安卓面试题来袭(猿辅导+斗鱼+字节+腾讯)
- 「8」进大厂必须掌握的面试题-Java面试-异常和线程
- 安卓面试必备的JVM虚拟机制详解,看完之后简历上多一个技能
- 成功拿下阿里P6的offer后,总结出大厂面试的血泪史
- 面试官:聊聊 etcd 中的 Raft 吧