文章目录
1. 什么是闭包?
闭包就是能够读取其他函数内部变量的函数。换句话说:函数嵌套,内层函数就形成了闭包。
本质上说一个函数就是一个闭包。
2. 闭包的特点?(即优缺点)?
优点:闭包可以隔离作用域。不暴露私有成员的目的,减少了变量冲突的风险。
缺点: 局部变量会常驻在内存中,严重情况下会造成内存泄漏。
最后总结一下闭包的好处与坏处
好处
①保护函数内的变量安全 ,实现封装,防止变量流入其他环境发生命名冲突
②在内存中维持一个变量,可以做缓存(但使用多了同时也是一项缺点,消耗内存)
③匿名自执行函数可以减少内存消耗
坏处
①其中一点上面已经有体现了,就是被引用的私有变量不能被销毁,增大了内存消耗,造成内存泄漏,解决方法是可以在使用完变量后手动为它赋值为null;
②其次由于闭包涉及跨域访问,所以会导致性能损失,我们可以通过把跨作用域变量存储在局部变量中,然后直接访问局部变量,来减轻对执行速度的影响
[详情](https://www.cnblogs.com/itjeff/p/10106855.html)
3. 闭包使用场景?
闭包主要用来找到父级函数中对应变量的值。
4. 面向过程编程思想?面向对象编程思想?(了解)
面向过程编程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
优点:解题思路明确,按步骤解决,不易出错,项目工期和成本方便控制。
缺点:中间某个步骤出错,有可能造成整个项目崩溃,影响太大。
面向对象编程是把构成问题的事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
优点:面向对象编程核心是构建各种对象。方便从全局考虑问题。
缺点:在构建对象时一次性考虑不全,对象属性和方法缺失。但有解决方案,可以使用继承来解决。
闭包文档:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures
https://blog.csdn.net/weixin_43586120/article/details/89456183
https://www.cnblogs.com/sandaizi/p/11582488.html
http://www.ruanyifeng.com/blog/2012/10/javascript_module.html
编程思想文档:
https://blog.csdn.net/weixin_38638020/article/details/89318501
https://baike.baidu.com/item/面向过程/9957246
https://baike.baidu.com/item/面向对象程序设计/24792
IIFE: Immediately Invoked Function Expression
意为立即调用的函数表达式,也就是说,声明函数的同时立即调用这个函数
放大模式: 使用场景:如果一个模块很大,需要分成几部分,或者一个模块需要继承另外一个
模块,这个时候就可以采用放大模式.
宽放大模式:
在浏览器环境中,模块的各个部分通常都是从网上获取的,有时无法知道哪一部分先加载
// 如果使用module2的写法则会出现问题,这个时候可以考虑加载一个空的对象,
// 这种模式叫做 宽放大模式 与放大模式相比, 宽放大模式就是立刻执行函数的
// 参数可以是空对象,推荐这种写法
堆与栈
简单数据类型,在声明的同时,回在栈中开辟一个空间,在进行赋值操作时,会把自己的值复制一份穿给想要赋值的变量。
对所赋值的变量进行修改值的操作,不会影响原始变量的值,
引用数据类型,会把地址(16进制)放进栈内存中,而值回放进堆内存之中,在进行赋值操作时,会把地址进行赋值。
对所赋值的变量进行修改值的操作,会影响原来的值。