js面试题学习整理

1. 异步操作有哪些?
回调函数,事件监听,promise,ajax,async,setTimeout,Generator

2. Promise是什么?
Promise是异步编程的一种解决方案。

从语法上讲,promise是一个对象,通过它可以获取异步操作的消息;

从本意上讲,它是承诺,承诺它过一段时间会给你一个结果。

promise有三种状态:pending(等待态),fulfiled(成功态),rejected(失败态);状态一旦改变,就不会再变化。创造promise实例后,就会立即执行。

处理问题:

·回调地狱,代码难以维护,常常第一个的函数输出是第二个函数的输入这种现象;

·promise可以支持多个并发请求,获取并发请求中的数据;

·promise可以解决异步的问题,本身并不能说promise是异步的。

Promise是一个构造函数,自身有all,reject,resolve这几个方法,原型上有then,catch等方法。

Promise的构造函数接收一个参数:函数,并且这个函数需要传入两个参数:

resolve: 异步操作执行成功后的回调函数。

reject:异步操作执行失败后的回调函数。

then: 传递状态的方式来使得回调函数能够及时被调用。

catch: 指定reject的回调,或者在执行resolve时,如果抛出异常,并不会报错卡死js,而是会进到这个catch方法中。

all:  谁跑得慢,以谁为准执行回调。all接受一个数组参数,里面的值最终都会返回Promise对象。提供了并行执行异步操作的能力,并且在所有异步操作执行完成后才执行回调。

race:  谁跑的快,以谁为准执行回调。

3. forEach(),map(),filter()的区别:
        forEach():

· 遍历数组,调用数组的每个元素,利用回调函数对数组进行操作,本质上等同于for循环;

· forEach会改变原数组。没有返回值;

· 不支持 continue 和 break;

· return只能跳出当前循环。

map():

· 遍历数组,调用数组的每个元素,利用回调函数对数组进行操作,与forEach类似;

· map是返回一个新数组,原数组不变,新数组的索引结构和原数组一致;

· map需要return返回值。

filter():

· 遍历数组,返回一个新数组(原数组的子集),回调函数用于逻辑判断;

· 回调函数为 true 则将当前元素添加到新数组中,false则跳过;

·不会改变原数组。

4. 事件委托/事件代理:
· 利用冒泡机制,将子元素的事件委托给父元素去监听(给父元素添加事件),当子元素触发事件时,事件冒泡到父级。如果希望指定的子元素才能触发事件,可以通过事件对象(event)获得事件源(target),然后通过条件判断是不是期望的子元素,如果是的话,执行事件,否则不执行事件。

· 事件委托的好处:

1.实现对未来元素事件的绑定;

2.减少事件绑定,提高性能。

posted @ 2023-02-11 18:03  ·灯  阅读(26)  评论(0编辑  收藏  举报