2023前端常见面试题大全
1. 什么是作用域?
变量 产生作用的区域就叫做作用域
2. 作用域的分类
全局作用域
局部作用域
3.局部作用域的分类
函数作用域
块级作用域
4.作用域链
作用域链的本质是变量查找机制
5.作用域链查找规则是什么?
a. 会优先查找自己的作用域
b. 自己的作用域查找不到的话会往上查找父级直到全局作用域
6.什么是垃圾回收机制
是 JS
中一种自动回收或释放内存的机制 简称 GC
7.垃圾回收机制有几种算法?
引用计数法:IE采用的引用计数算法, 定义“内存不再使用
”的标准很简单,就是看一个对象是否有指向它的引用
如果这个值的被引用了一次,那么就记录次数1 , 如果减少一个引用就减1。 如果引用次数是0 ,则释放内存。但它却存在一个致命的问题:嵌套引用。
标记清除法:就是从根部
(在JS中就是全局对象)出发定时扫描内存中的对象。 凡是能从根部到达的对象,都是还需要使用的。
无法由根部出发触及到的对象被标记为不再使用,稍后进 行回收
8.什么是闭包?
就是有权访问另一个函数作用域中变量的函数
9.闭包的表现形式?
在一个函数内部创建另外一个函数
10.闭包有什么作用?
封闭数据,实现数据私有,防止数据被意外修改
11.闭包的弊端
容易导致内存泄露
12.什么是变量提升?
使用 var
声明的变量,会被提升到函数或全局作用域的顶部,这个现象叫做变量提升。
13.用哪个关键词会产生变量提升?
var
会存在变量提升,let/const
声明的变量不存在变量提升
14.什么是构造函数
是一种特殊的函数,主要用来初始化对象 ,同时可以用构造函数来快速创建多个类似的对象。
15.构造函数创建对象的过程
- 创建新对象
- 构造函数this指向新对象
- 执行构造函数代码,修改this,添加新的属性
- 返回新对象
16.伪数组转真数组的方法
1.Array.from
2.Array.prototype.slice.call( )
3…展开运算符
17.什么是JavaScript 中的包装类型
在 JavaScript
中,基本类型是没有属性和方法的,但是为了便于操作基本类型的值,在调用基本类型的属性或方法时 JavaScript
会在后台地将基本类型的值转换为对象,这些对象就是包装类型
18. JavaScript有哪些数据类型,它们的区别?
JavaScript
共有八种数据类型,分别是 Undefined、Null、Boolean、Number、String、Object、Symbol、BigInt
。
其中 Symbol
和 BigInt
是 ES6 中新增的数据类型
Symbol
代表创建后独一无二且不可变的数据类型,它主要是为了解决可能出现的全局变量冲突的问题。
BigInt
是一种数字类型的数据,它可以表示任意精度格式的整数,使用 BigInt
可以安全地存储和操作大整数,即使这个数已经超出了 Number 能够表示的安全整数范围。
这些数据可以分为原始数据类型和引用数据类型:
栈:原始数据类型(Undefined、Null、Boolean、Number、String、Symbol 、BigInt
)
堆:引用数据类型(对象、数组和函数)
19.isNaN 和 Number.isNaN 函数的区别
重点在于判断 是不是NaN,而不是 数字
- 函数
isNaN
接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回true
,因此非数字值传入也会返回true
,会影响NaN
的判断。 - 函数
Number.isNaN
只会判断 传入的数据 是不是 一个NaN
,并且不会帮你做类型转换。
20.对原型、原型链的理解
原型,也叫原型对象,构造函数的一个属性,名字是 prototype
,它本身也是一个对象类型。在构造函数的原型所添加的成员可以被实例所共享。
原型链,指的基于原型继承的那些对象中,它们是通过 原型 prototype
将彼此联系在一起的,这个关系就叫做原型链。
21.原型链-查找规则
① 当访问一个对象的属性(包括方法)时,首先查找这个对象自身有没有该属性。
② 如果没有就查找它的原型(也就是 proto
指向的 prototype
原型对象)
③ 如果还没有就查找原型对象的原型(Object的原型对象)
④ 依此类推一直找到 Object
为止(null)
⑤ proto
对象原型的意义就在于为对象成员查找机制提供一个方向,或者说一条路线
22.什么是递归
函数内部自己调用自己, 这个函数就是递归函数,往往都需要添加终止递归的条件。
23.什么是深拷贝 什么是浅拷贝
浅拷贝只是针对引用类型数据中的属性做了一层复制,如果被拷贝的属性也是引用类型,那么这个属性只是复制了这个引用地址。
做了浅拷贝的对象之间可能会相互影响
深拷贝是针对引用类型数据中的属性做无限层级的复制,不管属性是值类型还是引用类型,会完整复制一份。 其在堆内存中完全开辟了一块内存地址,并将原有的对象完全复制过来存放
做了深拷贝的两个对象之间相互不会影响
除了 递归克隆对象、
JSON.stringify
两种方式做的拷贝,其他方法全部都是浅拷贝
24.call、apply、bind的区别
- 他们三都可以修改
this
指向, call、apply
在修改 this 指向的同时也会调用原函数、bind
只会返回修改 this 指向后的函数call
和apply
接收参数的方式不一样,call
类似普通函数一样接收参数、apply
接收的参数必须都放在一个数组内。
25.什么是防抖和节流
- 所谓节流,就是在连续触发的行为中控制它在 n 秒中只执行一次 可以用在 轮播图点击效果 、 鼠标移动、页面尺寸缩放 resize、滚动条滚动 等场景
- 所谓防抖,在单位时间内,某个动作只能执行一次,如果在单位时间内多次触发,那么只有最后一次有效,可以用在 搜索框 业务中。
二、Ajax面试题
26.HTTP 状态码
成功(2XX)
状态码 | 原因短语 | 说明 |
---|---|---|
200 | OK | 表示从客户端发来的请求在服务器端被正确处理 |
201 | Created |
请求已经被实现,⽽且有⼀个新的资源已经依据请求的需要⽽建⽴ 通常是在POST请求,或是某些PUT请求之后创建了内容, 进行的返回的响应 |
202 | Accepted |
请求服务器已接受,但是尚未处理,不保证完成请求 适合异步任务或者说需要处理时间比较长的请求,避免HTTP连接一直占用 |
204 | No content | 表示请求成功,但响应报⽂不含实体的主体部分 |
206 | Partial Content |
进⾏的是范围请求, 表示服务器已经成功处理了部分 GET 请求 响应头中会包含获取的内容范围 (常用于分段下载) |
重定向(3XX)
状态码 | 原因短语 | 说明 |
---|---|---|
301 | Moved Permanently |
永久性重定向,表示资源已被分配了新的 URL 比如,我们访问 http 2023前端常见面试题大全相关推荐
最新文章
热门文章 |