原型是函数特有的属性,称为:prototype。prototype 属性是一个对象,这个对象的作用是:存储需要共享的属性和方法,以便在自己作为构造函数时传给函数实例。prototype 对象中有一个自带属性 constructor,它是一个函数指针,指向的是实例对象的构造函数。函数还有一个属性:constructor,它是一个指针,指向的是函数构造函数。函数实例依然可以作为构造函数,生成新的函数实例,构造函数与函数实例之间原型形成的关系,称为原型链。 原型链的作用是实现方法和属性复用,减少重复代码,节省存储空间,也就是所说的实现继承。 原型继承的缺点是,如果共享的属性是引用类型,则会造成所有实例均可更改构造函数属性,另一个弊端是,在生成函数实例时,没办法向构造函数传递参数,做不到自定义属性值。因此,鉴于这两个缺点,常常原型和构造函数一起使用,形成组合继承,组合继承也是 JS 中继承最常用的模式。 https://www.zhihu.com/question/313743456
可以从内部函数访问外部函数的作用域
常见的有:
提示:BOM 即浏览器对象模型。由于 BOM 主要用于管理窗口与窗口之间的通讯,因此其核心对象是 window;
var testObject = {}
document.getElementById('idname').property = testObject //如果DOM不被消除,则testObject会一直存在,造成内存泄漏
//解决方法:
window.onunload = function () {
document.getElementById('idname').property = null //释放内存
}
function processData() {
const largeData = getLargeData() // 大对象
Promise.resolve().then(() => {
// 使用largeData
console.log(largeData.length)
// 问题:largeData在微任务完成前不会被释放
})
}
对原本异步回调函数调用的封装,解决了层层嵌套的问题,他有两种结果,pedding 和 resoleve/reject
4.1 防抖应用场景
输入连续输入
onscroll, onresize, oninput, touchmove
浏览器窗口大小改变后,只需窗口调整完成后,再执行 resize 事件中的代码,防止重复渲染
频繁操作点赞和取消点赞
4.2 节流应用场景
拖拽场景:固定时间内只执行一次, 防止高频率的的触发位置变动
监听滚动事件:实现触底加载更多功能
屏幕尺寸变化时, 页面内容随之变动,执行相应的逻辑
射击游戏中的 mousedown、keydown 时间
1:初中级前端面试题
2:前端面试考点大全(重要)
3:大厂高频试题(重要)
4:基本算法和设计模式+状态码(重要)
5:初级试题
6:前端最实用书签(重要)
7:js 执行机制
8: 大厂 100 问
9: 作用域、原型链(已学习)