前端面试题(一)------ 基础

# js

## √Event loop

event loop 其实就是 js 的执行机制,因为 js 是单线程的,他会将所有的任务放在一个主线程上逐步执行,主要分为同步和异步,先执行同步任务,同步任务全部执行完之后执行异步任务,异步任务又分为了宏任务和微任务,先执行宏任务,主要包括 script、setInterval,setTimout,一个宏任务执行完毕后再执行微任务(promise.then 后面的逻辑,nextTick),执行一个宏任务可以执行多个微任务,执行宏任务的时候按照代码先后顺序执行,以此来进行一个事件轮询

检查主线程为空:js 引擎存在 monitoring process 进程,会持续不断的检查主线程执行栈是否为空,一旦为空,就会去 Event Queue(任务队列)检查是否有等待被调用的函数。这个过程是循环不断的,所以整个的这种运行机制又称为 Event Loop(事件循环机制)。

## √js 数据类型

js 数据类型主要分为基本类型和引用类型

基本类型主要包括:undefined,number,string,null,boolean,symbol,存在栈内存中

引用类型主要包括:array,function,object,存在堆内存中

**基本和引用的区别**

基本数据类型:操作的是值,并且值存储在栈内存中

引用数据类型:操作的是堆内存的引用地址,并且会把对象中的键值对放在堆内存中

## √get 和 post 区别

get 能够缓存但是不安全,长度不能超过 4k,会保存历史记录

怎么让 get 失效:添加一个拦截器就可以实现,这个拦截器最好是你自己实现,过了这个拦截器你的什么参数都没有了

post 不支持缓存,但是安全,请求数据大小没有限制

## × 输入 url 发生了什么

1.DNS 解析(浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址)

2.建立 TCP 连接 (三次握手)

3.发送请求,分析 url,设置请求报文(头,主体)

4.服务器返回请求的文件 (html)

5.释放 TCP 连接(四次挥手)

6.浏览器渲染 html 文本并显示内容

## √ 数据类型判断

数据类型判断可以通过 typeof,instanceof

typeof 返回的是一个表示数据类型的字符串

instanceof 是用来判断 A 是否为 B 的实例,用来测试一个对象在原型链中是否存在构造函数的 prototype 属性,不能检测 null 和 undefined

object.prototype.string.call()

## √call,apply,bind 的区别

他们三个主要都是用来改变 this 指向的

call 和 apply 在改变 this 指向的时候调用了函数,但是 bind 没有调用,而是生成了一个新的函数,call 和 bind 是逐个进行传参,apply 是通过数组的方式进行传参

## √this 指向问题

1.直接调用的时候,this 指的是 window

2.在 obj.函数,this 指向的是谁就调用了谁的函数

3.在构造函数里面,this 指向的是当前类的实例

4.箭头函数没有自己的 this 指向,看看是否有外层函数,如果有外层函数,外层函数的 this 指向就是箭头函数的 this 指向,如果没有 this 指向 window

5.call,appiy,bind 指向的是第一个参数

## √ 原型,构造函数,实例

原型:他是一个简单的对象,用于实现属性的继承,每个 js 对象都有一个--proto--的属性指向该对象的原型

构造函数:可以通过 new 来实现一个对象的函数,我们可以把对象中的一些公共的属性和方法抽离出来,然后封装到这个函数里面

实例:通过构造函数和 new 出来的的对象,通过 proto 指向原型,通过 constructor 指向构造函数

**new 在执行时会做四件事情:**

1.在内存中创建一个新的空对象

2.让 this 指向这个新的对象

3.执行构造函数里面的代码,给这个新的对象添加属性和方法

4.返回这个新的对象(所以构造函数里面不需要 return)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值