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.减少事件绑定,提高性能。
js面试题学习整理的更多相关文章
- vue.js面试题整理
Vue.js面试题整理 一.什么是MVVM? MVVM是Model-View-ViewModel的缩写.MVVM是一种设计思想.Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务 ...
- 【前端芝士树】Vue.js面试题整理 / 知识点梳理
[前端芝士树] Vue.js 面试题整理 MVVM是什么? MVVM 是 Model-View-ViewModel 的缩写. Model代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑. ...
- js数组学习整理
原文地址:js数组学习整理 常用的js数组操作方法及原理 1.声明数组的方式 var colors = new Array();//空的数组 var colors = new Array(3); // ...
- 原生JS研究:学习jquery源码,收集整理常用JS函数
原生JS研究:学习jquery源码,收集整理常用JS函数: 1. JS获取原生class(getElementsByClass) 转自:http://blog.csdn.net/kongjiea/ar ...
- 整理Vue.js 面试题
Vue.js 面试题整理 Vue项目结构介绍 build 文件夹:用于存放 webpack 相关配置和脚本. config 文件夹:主要存放配置文件,比如配置开发环境的端口号.开启热加载或开启gz ...
- [ 转载 ] vue.js面试题一
转载自:https://www.cnblogs.com/aimeeblogs/p/9501490.html 如有侵权 联系删除 Vue.js面试题整理 一.什么是MVVM? MVVM是Model-Vi ...
- 2016 JS 笔试题汇总:
1 1 1 CS&S(中软国际): 1 JavaScript 循环表达式: 2 JavaScript表达式boolean返回值: 3 网页中的事件/HTML 事件属性/JavaScript ...
- dataTables 插件学习整理
在项目中使用了dataTables 插件,学习整理一下. dataTables 的官方中文网站 http://www.datatables.club 引入文件: 所有的都要引入 jq文件 1. dat ...
- js内存深入学习(二)
继上一篇文章 js内存深入学习(一) 3. 内存泄漏 对于持续运行的服务进程(daemon),必须及时释放不再用到的内存.否则,内存占用越来越高,轻则影响系统性能,重则导致进程崩溃. 对于不再用到的内 ...
- vue前端面试题知识点整理
vue前端面试题知识点整理 1. 说一下Vue的双向绑定数据的原理 vue 实现数据双向绑定主要是:采用数据劫持结合发布者-订阅者模式的方式,通过 Object.defineProperty() 来劫 ...
随机推荐
- 随机生成四则运算表达式【Unity】
根据自己项目需求调整代码中表达式的公共方法 using System.Collections; using System.Collections.Generic; using System; usin ...
- Vue3父组件调用子组件内部的方法
1. 子组件中定义方法并通过defineExpose暴露出去 import { reactive, defineExpose } from "vue"; const state = ...
- Oracle存储过程 Call使用
在 Oracle 中,可以将存储过程(PROCEDURE)定义在一个包(PACKAGE)中. 要调用包中的存储过程,需要使用包名和存储过程名来引用它们.以下是一个示例: 假设我们有一个名为 my_pa ...
- 【jenkins】jenkins 持续集成本地项目(win)
[项目]--->[配置]: [源码管理]= 无 [Pre Steps]:(因为是windows下,本地装有maven,直接用maven构建,又是个测试用例,就直接用mvn test) 选择win ...
- Liunx安装eclipse-mosquitto之docker容器
1.docker拉取 docker pull eclipse-mosquitto 2.查看镜像 docker images 3.建立配置目录 mkdir -p /mnt/mosquitto/confi ...
- Spring系列之基于 Java 的容器配置-9
目录 组合基于 Java 的配置 使用`@Import`注解 有条件地包含`@Configuration`类或`@Bean`方法 结合 Java 和 XML 配置 组合基于 Java 的配置 Spri ...
- 字节过滤流 缓冲流-->BufferedInputStream用法
1创建字节输入节点流FileInputStream fis = new FileInputStream("文件读取的路径");2创建字节输入过滤流,包装一个字节输入节点流Buffe ...
- tortoiseGit配置和git常用命令
tortoiseGit配置:https://blog.csdn.net/hjwdz2015/article/details/90487554 常用命令 一.git config --global us ...
- VUE项目中检测网页滑动注意事项
一.this.$nextTick(function () { window.addEventListener('scroll', this.onScroll, true) ...
- mysql主从复制常见问题(useing version:8)
Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ...