什么是垃圾回收机制
一个程序不再使用的内存,被js引擎'自动回收';如果不能回收就叫内存泄漏.
内存的生命周期, 创建,使用,销毁.
内存的创建:(声明一个变量,对象,函数)----都会在内存上开辟一个空间
内存的使用 对于遍历的一些操作,累加求和,获取dom元素.并修改属性等等
内存的回收 不再使用的遍历,会被js引擎自动回收(全局变量是关闭页面才会销毁,函数里面的变量,在函数调用完毕以后,自动销毁)
垃圾回收机制的算法
两个算法(引用计数法和标记清除法)
第一个:引用计数法:一个值不再被引用(引用次数为0),那么这个值就会被清除,内存就会被自动回收
第二个:标记清除法:从顶级对象去查找某个变量,如果找不到,就标记这个变量,然后清除
(为什么还会出现第二种计数法:因为 引用计数法,有一些循环引用的问题)
-会导致内存泄漏.所以现在浏览器主流都是 标记清除法
闭包的概念
什么是闭包 内层函数+访问了外层函数的变量 ----闭包就是函数(必须有两个条件)
// 全局作用域下面的函数 --- 全局函数
function f() {
// 函数f内的局部变量
const num = 10
// 内层函数
function g() {
// 在函数g的内部访问外层函数的变量num --- 为什么能访问到?
console.log(num);
}
g()
}
f()
闭包的使用场景
在函数外面访问函数内部的变量
function f(){
const num = 10;
// 这个函数的返回值是一个函数
return function(){
console.log(num);
}
}
// const res = function() {
// console.log(num);
// }
const res = f() // 将函数f的返回值,赋值给变量res,值就是一个函数
// 函数是可以加小括号调用的
res()
闭包的应用
总结 1.闭包就是函数 内层函数调用外层函数的变量形成闭包 2.闭包 可以让外面的函数 通过函数调用的方式 访问函数内部的变量 3.数据私有化