你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

【JavaScript进阶之旅 第五章】 作用域 作用域链 预编译 闭包基础

2021/12/24 9:48:55

文章目录

  • 【JavaScript进阶之旅 第五章】 作用域 作用域链 预编译 闭包基础
    • 作用域链
    • 预编译
    • 闭包

【JavaScript进阶之旅 第五章】 作用域 作用域链 预编译 闭包基础

作用域链

AO GO 为了解决作用域、作用域链相关所产生的一切问题

[[scope]]

函数创建时,生成的一个JS内部隐式属性。函数存储作用域链的容器,作用域链。

AO:函数执行期上下文
GO:全局执行期上下文

函数执行完成后,AO要销毁,AO是一个及时的存储容器。

预编译

请添加图片描述

在这里插入图片描述

请添加图片描述

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

请添加图片描述

function a() {
	function b() {
		function c() {

		}
		c();
	}
	b();
}
a();


/**
 *	a定义: 生成 a.[[scope]] ->  0: GO
	a执行: 生成 a.[[scope]] ->  0: a -> AO  1: GO

	b定义: 生成 b.[[scope]] ->  0: a -> AO  1: GO
	b执行: 生成 b.[[scope]] ->  0: b -> AO  1: a -> AO 2: GO

	c定义: 生成 c.[[scope]] ->  0: b -> AO  1: a -> AO 2: GO
	c执行: 生成 c.[[scope]] ->  0: c -> AO  1: b -> AO 2: a -> AO 3: GO

	c结束: c.[[scope]] ->  1: b -> AO 2: a -> AO 3: GO

	b结束: b.[[scope]] ->  0: a -> AO  1: GO
		   c.[[scope]] -> 销毁

	a结束: a.[[scope]] -> 0: GO
 		   b.[[scope]] -> 销毁
 */

闭包

当内部函数被返回到外部并保存时,一定会产生闭包,闭包会保持原来的作用域链不释放。

请添加图片描述
请添加图片描述

请添加图片描述
请添加图片描述