一.闭包
内部函数访问外部函数的变量,就形成了闭包
闭包的作用:变量私有化
如果不进行使用,则会被释放掉的
function fn() {
let num = 10
function inner() {
console.log(num)
}
}
fn()
//没有对内部进行引用,这是会被直接销毁释放掉的
闭包的正确使用,return
function fn() {
let count = 10
function inner() {
count++
console.log('函数被调用了' + count + '次')
}
return inner
}
let result = fn()
result()
//注意:这里的函数以及变量都没有被释放
//不用则释放
//利用标记清除: 从根部,全局出发,访问不到的内存空间,就会被自动回收
result = null
注意:外部函数中,我们要引用return(里面的函数及变量才不会被释放掉)
二.原型链
谈到原型链我们就得绘制构造函数,原始,实例三者关系的关系图了
1.构造函数 new 实例化对象,实例化对象上有一个__proto__属性,指向构造函数的原型
2.原型对象可以通过constructor访问到构造函数,
3.构造函数可以通过prototype对象原型访问到原型对象
实例访问属性或者方法时,会先在自己身上找,如果没有,则往原型上找,如果还是没有,则会再往上一层的原型上查找,知道顶部,没有则报错
三.首屏加载慢的原因
首屏加载慢指的是用户向浏览器输入的内容,浏览器展示出的时间
原因:1.网络延时问题
2.可能存在文件体积过大
3.资源是否重置发送请求去加载了
4.加载脚本的时候,渲染内容堵塞了
解决:1.静态资源本地缓存
2.图片资源的压缩
3.开启GZip压缩