继承和闭包
继承
父类拥有属性及相关方法, 通过继承,子类也可以拥有(私有的不可能获取)
继承实现方式
1.ES6的extends关键词来实现继承(class)
class Person{
constructor( ){
this.name = '哈哈';
}
}
class Son extends Person{
constructor( ) {
super( ) //指向父类的构造函数, 如果要使用this关键词
this.age = 18;
}
}
var son = new Son();
console.log(son.name);
2. 原型继承( 将对应的需要继承的对象加在原型上)
class Person{ constructor( ){ } } class Son{ constructor( ) { } } //原型继承 将对应的继承的对象的值赋给对应的原型 Son.prototype = new Person( );
3. 通过this来指向继承
function Person(){ this.name = "hahah" } function Son(){ Person.call(this); //更改this的指向 this.age = 18; } var son = new Son(); console.log(son.name, son.age);
4. 组合继承
function Person(){ this.name = "hahah" } function Son(){ Person.call(this); //更改this的指向 this.age = 18; } Son.prototype = new Person(); var son = new Son(); console.log(son.name, son.age);
闭包
闭包的概念: 函数嵌套函数, 内部函数可以访问外部函数的变量和参数, 而变量和参数不会被垃圾回收机制回收
1. 在函数内部返回函数
2. 函数内部都要存储对应外部函数引用
3. 这个数据不会被回收 ( 持久化 )
形成闭包
- 2个嵌套函数
- 利用作用域
- 垃圾回收机制
语法 :
function fn( ) { function show( ) { //私有函数 var myname = "刘德华"; //私有属性, 私有变量 } return show; } var f = fn( ); f( ) //f-->show ---> show( ) 执行了show函数 Java 公共 public Java 私有 private Java 静态 static 私有 : 受保护, 不能被外部访问, 就称之为私有
函数的执行过程
function fn( ) { console.log(123); var message = "hello"; var number = 0; number++; console.log(message); console.log(number); } fn( ) //执行完 以后message会被回收 number值为1 fn( ) //执行完 同样被回收
1. 预编译
- --- 开辟一个内存空间装函数对象
- --- 在对应的内存空间再开辟一个空间/代码块空间(来装代码)
2. 执行
- 找到函数的对象空间, 在这个对象空间上开辟一个执行空间
- 再将对应的代码块的空间合并到执行空间里面去, 进行代码的执行
- 执行完毕, 执行空间销毁, 对应的代码块空间也会被销毁
- 对应的代码块里面的内容就会被垃圾回收机制回收
对应流程结束后, 对应的函数代码块中声明的变量全部被回收
- 第一次执行和第二次执行中声明的变量不是一个,是不相同的
- 想要对应变量不被回收 ---> 再开辟一个空间, 将数据存入, 这个空间与执行空间无关
闭包优点
1. 持久化, 可以作为缓存
2. 不会造成数据的全局污染 (外部的内容不会直接访问函数内部的变量)
闭包缺点
1. 因不会被回收, 内存空间会被一直占用
2. 会一直保持引用
示例
function sum( ) { let number = 10; return function( ) { number++; console.log(number); } } var fn = sum( ); fn( ) ; //11 fn( ); //12
闭包的应用
防抖
1. 执行一个内容时, 只执行一次
举例 : 电梯间隔二十秒关门, a 进来时, 等20秒, 20秒还没结束, b 上来, 关门操作被终止, 重新开始20秒等等关门操作, 这是c上来,b 的关门操作被终止, 再次重新20秒关门操作
节流 ( 事件处理 )
在规时间内只执行的次数, 只执行第一次
节流和防抖区别
节流只会在规定时间男执行一次 ( 总共会执行一次 )
防抖在一定时间内只会执行一次 ( 总共只会执行一次 )
函数柯里化 ( 颗粒化 )
概述 : 将多个参数的方法拆分为多个单个参数的方法
普通求和函数
简单的函数柯里化
垃圾回收机制(GC)
JS引擎会在一定的时间间隔来自动对内存进行回收(把内存释放)
两种回收机制:
- 标记清除
- 引用计数 --- 针对与 [ 引用类型 ] -- function/date/Array/Object
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构