【西安分院】闭包是什么?用处如何?

分享人:马扬睿

目录

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

闭包是什么?用处如何?

先看看MDN的定义 闭包是函数和声明该函数的词法环境的组合

2.知识剖析

  • 用通俗的话来讲的话,有权访问另一个函数作用域内变量的函数都是闭包

我们主要记住两种应用情况,函数作为返回值以及函数作为参数传递

函数作为返回值
function fn()
var max=10;
return function bar(x){
if(x>max){
console.log(x)
} }
var f1=fn();
f1(15)

第二,函数作为参数被传递

var max=10,
fn=function (x){
if(x>max){
console.log(x)
} }
(function(f){ var max=100; f(15); })
(fn)

为什么会产生闭包呢?

当一个函数被调用完成之后,其执行上下文环境将被销毁,其中的变量也会被同时销毁。

有些情况下,函数调用完成之后,其执行上下文环境不会接着被销毁。

但是,如果执行到具体的代码块的时候,返回的是一个函数的话

因为每个函数可以创建独立的作用域,如果这个函数一直引用着另一个函数内的某个变量

这个变量是不会被内存回收机制回收的

因为回收了该函数就找不到这个变量了

有点像

一个餐厅,盘子总是有限的,所以服务员会去巡台回收空盘子,但还装着菜的盘子他怎么敢收

只有你自己手动倒掉了盘子里面的菜(=null),那盘子就会被收走了,这就是所谓的内存回收机制

3.常见问题

闭包的概念很抽象,如何使用闭包呢?

4.解决方法

demo

5、编码实战

6、有哪些常见错误

7、参考文献:

参考一:《JavaScript高级编程设计》

参考二: 闭包

参考三: 深入理解javascript原型和闭包(15)——闭包

8、更多讨论

谢谢观看

分享人:马扬睿