作家
登录

Javascript 设计模式(二) 闭包

作者: 来源:www.28hudong.com 2013-03-30 01:34:10 阅读 我要评论

正文 闭包的概念: 闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。 最常见的闭包 复制代码 代码如下: 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 笔记二 Array和Date对象方法

JavaScript的对象基础 本篇主要讲解本地对象Array和Date的各种方法。 一种面向对象语言需要向开发者提供四种基本能力: (1) 封装——把相关的信息(无论数据或方法)存储在对象中的能力。 (2) 聚集——把一个对象存>>>详细阅读


本文标题:Javascript 设计模式(二) 闭包

地址:http://www.17bianji.com/kaifa2/JS/26336.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)