8月6日
闭包的理解,优点缺点以及应用场景
闭包是指在一个函数内部定义的函数,并且这个内部函数可以访问到外部函数的变量。闭包可以捕获并保存外部函数的状态,使得外部函数的局部变量在内部函数调用时仍然可用。
闭包的优点包括:
- 数据隐藏:闭包可以隐藏外部函数的变量,避免全局命名空间的污染。
- 数据持久化:闭包中的变量可以在外部函数执行完后仍然存在,可以实现记忆功能。
- 高级特性:闭包可以实现函数工厂,动态创建函数。
闭包的缺点包括:
- 内存占用:闭包中的变量不会被及时释放,可能导致内存占用过高。
- 性能损耗:由于闭包涉及到变量查找,执行效率相对较低。
- 容易造成引用循环:如果闭包中引用了外部函数的变量,而这个变量又引用了闭包本身,就会造成引用循环,导致内存泄漏。
闭包常见的应用场景包括:
- 实现私有变量和方法:通过闭包可以模拟类似于私有变量和方法的效果。
- 延迟执行和节流防抖:通过闭包可以实现延迟执行和控制函数频繁执行的效果。
- 缓存:通过闭包可以实现函数的记忆功能,避免重复计算。
总之,闭包是一种强大的特性,在某些场景下可以发挥重要作用,但在使用时需要注意内存和性能方面的问题。
事件循环的理解以及应用理解
任务在主线程不断进栈出栈的一个循环过程。任务会在将要执行时进入主线程,在执行完毕后会退出主线程。
JavaScript是一门单线程的语言,意味着同一时间内只能做一件事,
但是这并不意味着单线程就是阻塞,而实现单线程非阻塞的方法就是事件循环
在JavaScript中,所有的任务都可以分为
同步任务:立即执行的任务,同步任务一般会直接进入到主线程中执行
异步任务:异步执行的任务,比如ajax网络请求,setTimeout定时函数等
异步任务还可以细分为微任务与宏任务
微任务一个需要异步执行的函数,执行时机是在主函数执行结束之后、当前宏任务结束之前
宏任务的时间粒度比较大,执行的时间间隔是不能精确控制的,对一些高实时性的需求就不太符合
JS类型检验的方式
1. typeof
判断
typeof
返回的类型都是字符串形式
2. Constructor
实例constructor
属性指向构造函数本身
constructor
判断方法跟instanceof
相似,但是constructor
检测Object
与instanceof
不一样,constructor
还可以处理基本数据类型的检测,不仅仅是对象类型
3. Instanceof
instanceof
可以判类型是否是实例的构造函数
instanceof
后面一定要是对象类型,并且大小写不能错,该方法适合一些条件选择或分支。
4. Object.prototype.toString.call()
判断类型的原型对象是否在某个对象的原型链上
5. 通过object
原型上的方法判断
比如array.isArray()
来判断是不是一个数组
6. ===(严格运算符)
通常出现在我们的条件判断中,用来判断数据类型的话就会非常的有局限性,比如判断一个变量是否为空,变量是否为数据等
面向对象编程
面向对象编程(Object Oriented Programming, OOP, 面向对象程序设计)是一种计算机编程的设计思想,不是一门编程语言。同时,OOP的目的不是为了提高运行效率,而是为了提高开发效率和系统的可维护性、可扩展性、可重用性。
面向对象编程中最重要的术语是“类”和“对象”。类是对某个事物的概括定义,可以把它看作一个模板,是对事物的抽象定义(描述)。对象则是对某个事物的具体实现,可以看做依照图纸建造的具体的实际事物。为了实现面向对象的编程,我们首先要定义一个“类”,然后在实际的开发过程中,根据实际的功能需求,依据这个“类”实现出一个“对象(实例)”。
链接:面向对象编程借鉴于
面向对象
编程思想:
基本思想
基本思想是使用对象,类,继承,封装等基本概念来进行程序设计
优点
易维护
采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的
易扩展
开发工作的重用性、继承性高,降低重复工作量。
缩短了开发周期
一般面向对象包含:继承,封装,多态,抽象
什么是类, 什么是对象?
类是用于描述同一类形的对象的一个抽象的概念, 类中定义了这一类对象应该具有的"静态属性"和"动态属性"
对象是类的一种实例化, 对象用"属性"和"方法"来对应描述事物所具有的"静态属性"和"动态属性"
类是用于描述同一类形的对象的一个抽象的概念, 类中定义了这一类对象应该具有的"静态属性"和"动态属性"