手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >Javascript 设计模式(二) 闭包
Javascript 设计模式(二) 闭包
摘要:正文闭包的概念:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。最常见的闭包复制代...

正文

闭包的概念:

闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。

最常见的闭包

复制代码 代码如下:

function a() {

var i=0;

return function(){

alert(i++);

}

}

var b=a();

for(var i=0;i<3;i++){

b();

}

解释上面代码前,先接受一个函数的创建和执行过程

第一步:定义函数,设置环境,创建作用域链(scope chain)现a为全局变量,则a的作用域链中只有window

第二步:执行a, 首先创建作用域(a.scope=a),然后创建活动对象(callObject),并将callObject放入a的作用域链的顶端,因此a的作用域链中含有两个对象(a和window)

第三步:在活动对象上添加一个arguments属性,保存调用a时的参数值

第四步:将形参和内部变量赋值到活动对象a上

javascriptGC原理:如果一个对象不再被引用,那么这个对象会被GC回收。如果两个对象无干扰的互相引用,那么这两个对象也会被回收。

总结:

1、首先定义a时,创建了a的作用域链(scope chain)

2、(var b=a())执行a时,创建作用域a.scope=a,并创建callObject对象添加a的作用域中

3、a对象上添加了arguments属性,并将i和return函数赋值给活动对象

4、执行a时将b指向了a的ruturn函数值,在b中又引用的a中的局部变量i,因此不符合GC的回收标准,活动对象a没有被回收,因此b访问i是第一次访问的对象,并且只有在b中才能访问

【Javascript 设计模式(二) 闭包】相关文章:

javascript正则表达式总结

javascript原型模式用法实例详解

javascript动态设置样式style实例分析

Javascript 不能释放内存.

JavaScript正则表达式之multiline属性的应用

Javascript客户端脚本的设计和应用

javascript实现仿腾讯游戏选择

javascript模拟评分控件实现方法

JavaScript正则表达式的分组匹配详解

纯javascript制作日历控件

精品推荐
分类导航