作用域

作用域
一切对象都有属性,那只要是对象就有属性
Function是函数类对象 有可以访问的属性,也有不可以访问的属性
例如:scope 作用域链,其中存储了运行期上下文的集合 这个集合呈链式连接 隐式属性 系统可以调用,自己不可以
运行期上下文:当函数执行时,会创建一个称为执行期上下文的内部对象,一个执行期上下文定义了一个函数执行时的环境,函数每次执行对应的执行上下文都是独一无二的,所以多次调用一个函数会导致创建多个执行,
VO(变量对象)用来存储上下文的函数声明,函数形参和变量
AO(活动对象)当函数被调用后,这个特殊的活动对象就被创建了,它包含普通参数与特殊参数对象,活动对象在函数上下文中作为变量对象使用,只作为即使的存储空间 执行完被销毁
function a(){ //a定义 a.[[scope]]–>0:GO{}
}
var glob=100;
a(); //a执行 a[[scope]]–>0:AO{} 1:GO{}
ps:AO被放在作用域链顶端,变量从作用域链顶端向下寻找
内层函数被保存到外部一定是使用了闭包
当内部函数被保存到外部时,将会生成闭包。闭包会导致原有作用域链不释放,造成内存泄漏。
闭包的作用:①实现公有变量;eg:函数累加器
Function add(){
Var count=0;
Function demo(){
Count++;
Console.log(count);
}
Return demo;
}
Var counter=add();
Counter();
Counter();
Counter();
Counter();
Counter();
Counter();
②可以做缓存(存储结构);
③可以实现封装,属性私有化;
④模块化开发,防止污染全局变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值