当前位置: 移动技术网 > IT编程>开发语言>JavaScript > 2020腾讯前端校招题目自己的理解

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

2020年08月10日  | 移动技术网IT编程  | 我要评论
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

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网