一、JS的简单数据类型和复杂类型(引用类型)
二、Javascript 中的垃圾回收机制
1)JS中内存的分配和回收都是自动完成的,内存在不使用的时候会被垃圾回收器自动回收。
2)内存的生命周期:
- 内存分配:当我们声明变量、函数、对象的时候,系统会自动为他们分配内存
- 内存使用:即读写内存,也就是使用变量、函数等
- 内存回收:使用完毕,由垃圾回收自动回收不再使用的内存
说明:
- 全局变量一般不会回收(关闭页面回收);
- 一般情况下局部变量的值, 不用了, 会被自动回收掉
2)什么是内存泄漏?
不再用到的内存,没有及时释放,就叫做内存泄漏
3)垃圾回收算法
垃圾回收, 核心思想就是如何判断内存是否已经不再会被使用了, 如果是, 就视为垃圾, 释放掉 下面介绍两种常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法
引用计数法:
const person = {
age: 23,
name: '稼轩'
}
const p = person
person = 1
p = null
由上面可以看出,引用计数算法是个简单有效的算法。 但它却存在一个致命的问题:嵌套引用。 如果两个对象相互引用,尽管他们已不再使用,垃圾回收器不会进行回收,导致内存泄露。
所以现代的浏览器已经不再使用引用计数算法了。
标记清除法:
function fn() {
let o1 = {}
let o2 = {}
o1.a = o2
o2.a = o1
return '引用计数无法回收'
}
fn()
不在使用的对象被标记为不再使用,稍后进行回收。
JS垃圾回收机制 主要为 闭包 做铺垫
三、JS性能优化的方式有哪些
1.减少大量DOM操作
2.减少声明及语句数
3.减少循环体中活动
4.事件委托
5.图片懒加载
6.慎用全局变量
7.通过原型增加方法
// before
const fn = function(){
this.foo = function(){}
}
// after
const fn = function(){}
fn.prototype.foo = function(){}
.........
四、展开运算符
展开运算符(…),将一个数组进行展开
- 不会修改原数组
- 典型运用场景: 求数组最大值(最小值)、合并数组等
求数组最值
const arr = [1,6,3,4]
consloe.log(Math.max(..arr))//6
consloe.log(Math.min(..arr))//1
合并数组
const arr1 = [1,2,3]
const arr2 = [4,5,6]
const merge = [...arr1,...arr2]
consloe.log(merge) // [1,2,3,4,5,6]
五、AJAX 请求数据步骤是什么?传输的数据是用的 get 还是post?
AJAX 请求数据步骤:
1.创建XMLHttpRequest异步对象
2.设置回调函数
3.使用open方法与服务器建立连接
4.向服务器发送数据
5.在回调函数中对不同的响应状态进行处理
传输的数据是用的 get 还是post?
get请求是从指定的资源请求数据,get请求基本上用于从服务器获得(取回)数据。注释:GET 方法可能返回缓存数据。
post请求是向指定的资源提交要处理的数据,post请求也可用于从服务器获取数据。不过,post方法不会缓存数据,并且常用于连同请求一起发送数据