您的位置:首页 > 其它

面向对象--闭包

2016-03-11 23:01 120 查看
闭包:

作用域(scope): 2种

1. 全局作用域:

全局变量: 随处可用,可反复使用

2. 函数作用域:

局部变量: 只有函数调用时,函数内部可用

调用结束后,释放

包含: 参数和在函数内声明的变量

***函数的执行原理:

0. 程序加载时:

创建执行环境栈:保存函数调用顺序的数组

首先压入全局执行环境(EC)

全局EC引用全局对象window

window中将要保存全局变量

1. 定义时:

创建函数对象,封装函数的定义。

在函数对象中定义scope属性,记录函数来自的作用域

全局函数的scope都是window

2. 调用前:

在执行环境栈中压入新的EC

创建活动对象AO: 保存本次函数调用用到的局部变量

在EC中添加scope chain属性引用AO

设置AO的parent为函数的scope引用的对象

3. 调用时:

变量的使用规则: 优先使用局部变量

如果局部没有才去全局找

4. 调用完:

函数的EC出栈,AO自动释放,局部变量也就自动释放

作用域链(scope chain):

以EC中scope chain属性为起点,经过AO逐级引用,形成的链式结构

作用: 查找变量。

***闭包:保护一个可反复使用的局部变量的一种词法结构

为什么: 全局变量: 优: 可重复使用

缺: 随处可用,容易被污染

局部变量: 优: 仅内部可用,不会被污染

缺: 一次性

如何实现: 3步:

1. 确定受保护的变量?

2. 定义专门使用变量的函数

3. 用外层函数,将受保护的变量和操作变量的函数包裹起来

外层函数返回内层函数

如何获得内部函数:

调用外部函数,使用变量接住返回的内部函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: