闭包&&IIFE&&堆与栈

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进制)放进栈内存中,而值回放进堆内存之中,在进行赋值操作时,会把地址进行赋值。
对所赋值的变量进行修改值的操作,会影响原来的值。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值