前端
localstorage
首页加载速度
防抖和节流
基础整理
执行上下文
首先从宏观的角度来说: JavaScript代码要想能够被执行,就必须先被V8引擎编译,编译完成之后才会进入到执行阶段,总结为六个字:先编译再执行。
调用栈
console.trace() 可以打印栈中的信息
调用栈是一种数据结构,它记录了我们在程序中的位置。如果我们运行到一个函数,这个时候JavaScript引擎其实是会为当前函数创建函数执行上下文,它就将该函数执行上下文放到栈顶,当从这个函数返回的时候,就会将这个函数执行上下文从栈顶弹出,这就是调用栈做的事情。也就是说执行上下文是通过调用栈来管理的。
var const let
var定义的变量存在变量提升,块级作用域对var无效。 let不会有变量提升,有块级作用域、函数作用域和全局作用域。
闭包
函数创建完,闭包就形成了,并且不能自动释放,可选择手动设置null进行释放闭包。
我将永远记住闭包的方法是通过背包的类比。当一个函数被创建并传递或从另一个函数返回时,它会携带一个背包。背包中是函数声明时作用域内的所有变量。
- https://juejin.cn/post/6844903858636849159
- https://juejin.cn/post/7120371754274553887
- https://juejin.cn/post/6937469222251560990
- https://juejin.cn/post/7196636673694285882
- https://juejin.cn/post/7120371754274553887
原型和原型链
深拷贝和浅拷贝
- weakmap
- https://es6.ruanyifeng.com/#docs/set-map#WeakMap
- weakmap 的key为对象
- weakmap 键名所引用的对象都是弱引用。 WeakMap 弱引用的只是键名,而不是键值。