欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

2020腾讯前端校招题目自己的理解

程序员文章站 2022-04-01 12:24:41
1. JS有哪些基本数据类型基本数据类型:number string null undefined boolean除此之外JS还有引用基本类型:Object Arr Function这是JS的两种数据类型2.setTimeout与setInterval的区别这两个都是定时器,间隔一段事件后执行传入的函数区别在于setTimeout只执行一次,setInterval间隔一定时间重复执行,需要clearInterval才能清除定时器setTimeout(function(){......

1. JS有哪些基本数据类型

基本数据类型:number string null undefined boolean  

除此之外JS还有引用基本类型:Object  Arr Function

这是JS的两种数据类型

2.setTimeout与setInterval的区别

这两个都是定时器,间隔一段事件后执行传入的函数

区别在于setTimeout只执行一次,setInterval间隔一定时间重复执行,需要clearInterval才能清除定时器

setTimeout(function(){
  console.log("123");},1000);

setInterval(function(){

  console.log("123");},1000);

3.setTimeout设置一个时间,那么一定是这个时间之后执行吗?

答案是否定的,不是

原因先不讲,我觉得再说这个之前应该要先讲一下JS的代码执行机制才能更好理解这个问题

4. JS的执行机制

JS是单线程执行任务,那么这里还有一个问题就是为什么JS是单线程执行,众所周知,多线程效率更高不是吗?

JS单线程执行,所有的任务如果放在主线程执行会造成任务阻塞,必须要等到上一个任务完成才能去执行后面的任务,所以采用了一个统一的标准,将一些费时的任务放到子线程去执行,于是就衍生出了两种任务,一种是同步任务一种是异步任务

同步任务就放到主线程执行,异步任务就不妨到主线程而放到子线程也就是任务队列(task queue),等待主线程执行完毕才去执行异步任务

于是就有了下面的执行机制:

()所有同步任务放到主线程

()主线程之外存在一个子线程受主线程控制,只要异步任务有了结果就在任务队列中放置一个事件

()主线程任务执行完毕就去自动读取任务队列中的事件,对应的异步任务结束等待状态进入执行栈开始执行

()不断重复上面过程,形成事件循环机制

5.那么JS为什么是单线程的呢?

举一个例子,如果JS是双线程工作,没错,效率肯定更高,但是如果对一个DOM节点进行操作

一个线程将DOM节点删除,一个线程将DOM节点添加进来,那么到底听谁的?

所以JavaScript本身就是一门浏览器脚本语言,是进行用户交互的,多线程会造成一些同步的复杂问题,所以使用主线程控制子线程的这种机制是最好的选择

6.宏任务和微任务

任务队列中又分为宏队列和微队列

宏队列:定时器都是,setTimeout setInterval,ajax回调,dom事件回调

微队列:promise回调函数

在主线程执行完毕之后,去执行任务队列中的任务,但是任务队列又分为宏队列和微队列,那么先执行哪个呢?

先执行宏队列但是每次执行宏队列都会去先检查微队列中的任务,如果有等待任务就先执行微队列的任务在执行宏队列的任务,

所以也可以说是先执行微队列的任务,所以promise的then()中回调函数总是先于setTimeout()执行

转到第3题

setTimeout不会再设定时间后执行的原因应该也很清晰了把,就是因为要等到主线程执行完毕才执行这个函数,所以并一定会再设定时间之后立即执行

7.pomise的几种状态

promise是有三种状态

pending:初始化状态

resolved也是fuliled状态:成功状态

rejected:失败状态

8.列举常用的数据结构

9.栈、队列、堆栈、堆是什么

10.promise实现原理

只是看到了一些同学的面经分享,添加一些自己的理解,持续更新

本文地址:https://blog.csdn.net/weixin_43797908/article/details/107879263

相关标签: 前端