作用域&作用域链,闭包&立即执行函数

作用域

[[scope]]:指的就是我们所说的作用域,其中存储了运行期上下文的集合。
每个JavaScript函数都是一个对象,对象中有些属性我们可以访问,但有些不可以,这些属性([[scope]])仅供JavaScript引擎存取。

作用域链:[[scope]]中所存储的执行期上下文对象的集合,这个集合呈链式链接,这种链式链接叫作用域链。

执行期上下文

AO{}
每个函数都有它的执行期上下文的集合 叫作用域链。
函数执行完,执行期上下文销毁。
在这里插入图片描述
在这里插入图片描述
-----------------------------------------------------------------------------------

作用域&执行期上下文精讲:

a执行 – > 产生AO{}
放在作用域的顶端
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
拿的就是a的AO{} -->引用

在这里插入图片描述
a执行完:
在这里插入图片描述
b完全被销毁
b完全被销毁

多层函数作用域链:

在这里插入图片描述
在这里插入图片描述

闭包

定义:

但凡是内部的函数保存到外部,必定产生闭包
在这里插入图片描述
这里的泄露是指占内存,导致内存泄漏
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

闭包实例1:

在这里插入图片描述
注解:b的AO{}执行然后销毁,但是a的AO{}没有扔,改变了。大概如下图:
在这里插入图片描述

闭包的作用

在这里插入图片描述

作用累加例子:

在这里插入图片描述

作用做缓存例子:

在这里插入图片描述

(补充)对象:

在这里插入图片描述

作用三例子:

在这里插入图片描述
在这里插入图片描述

立即执行函数

定义:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

例:执行完就被释放

执行完就被释放
跟其它函数无其它差别
在这里插入图片描述
在这里插入图片描述

例:多种方式

A方式:

在这里插入图片描述

B方式:

把d用num接收:
在这里插入图片描述
输出
在这里插入图片描述

精讲补充:

在这里插入图片描述
只有表达式才能被执行符号执行
能被执行符号执行的表达式–> 立即执行函数
在这里插入图片描述
在这里插入图片描述
它会忽略函数名
在这里插入图片描述
补充
在这里插入图片描述

在这里插入图片描述
不报错 不执行。
系统理解为:
在这里插入图片描述

闭包和立即执行函数

在这里插入图片描述
如下:
在这里插入图片描述
等到执行的时候,才会去找i的值是多少
所以打印了都是10

解决:
在这里插入图片描述
如下:
在这里插入图片描述

在这里插入图片描述

注:来源网课视频整理

// An highlighted block
var foo = 'bar';

猜你喜欢

转载自blog.csdn.net/weixin_45179978/article/details/94065690