易截截图软件、单文件、免安装、纯绿色、仅160KB

深入理解Javascript闭包

 最近在网上查阅了不少Javascript闭包(closure)相关的资料,写的大多是非常的学术和专业。对于初学者来说别说理解闭包了,就连文字叙述都很难看懂。撰写此文的目的就是用最通俗的文字揭开Javascript闭包的真实面目。
  一、什么是闭包?
  “官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
  相信很少有人能直接看懂这句话,因为他描述的太学术。我想用如何在Javascript中创建一个闭包来告诉你什么是闭包,因为跳过闭包的创建过程直接理解闭包的定义是非常困难的。看下面这段代码:
    function a(){
      var i=0;
      function b(){
        alert(++i);
      }
      return b;
    }
    var c = a();
    c();
  这段代码有两个特点:
  1、函数b嵌套在函数a内部;
  2、函数a返回函数b。
  这样在执行完var c=a()后,变量c实际上是指向了函数b,再执行c()后就会弹出一个窗口显示i的值(第一次为1)。这段代码其实就创建了一个闭包,为什么?因为函数a外的变量c引用了函数a内的函数b,就是说:
  当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。
  我猜想你一定还是不理解闭包,因为你不知道闭包有什么作用,下面让我们继续探索。
  二、闭包有什么作用?
  简而言之,闭包的作用就是在a执行完并返回后,闭包使得Javascript的垃圾回收机制GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。这是对闭包作用的非常直白的描述,不专业也不严谨,但大概意思就是这样,理解闭包需要循序渐进的过程。
在上面的例子中,由于闭包的存在使得函数a返回后,a中的i始终存在,这样每次执行c(),i都是自加1后alert出i的值。
  那 么我们来想象另一种情况,如果a返回的不是函数b,情况就完全不同了。因为a执行完后,b没有被返回给a的外界,只是被a所引用,而此时a也只会被b引 用,因此函数a和b互相引用但又不被外界打扰(被外界引用),函数a和b就会被GC回收。(关于Javascript的垃圾回收机制将在后面详细介绍)
  三、闭包内的微观


相关文档:

使用javascript打开模态对话框

【转自】http://www.cnblogs.com/chenxizhang/archive/2009/05/27/1491049.html
1. 标准的方法
<script type="text/javascript">  
function openWin(src, width, height, showScroll){  
window.showModalDialog (src,"","location:No;status:No;help:No;dialogWidth:"+width+";dialogHei ......

如何在javascript中访问页面定义的变量

【转】http://www.cnblogs.com/chenxizhang/archive/2010/01/01/1637309.html
如果我们需要在javascript访问到页面中定义的变量,大致是如下的语法
//这是2010年1月1日增加的代码
var ismanager = "<%= DepartManager %>";
if (ismanager == "true") {
$(" ......

Javascript String类的属性及方法[转]

以下是javaScript中的String使用方法:
String 类 Attribute and method
anchor()              创建一个<a>标签的实例,将其name属性设置为被传递给此方法的字符串
big()           & ......

frame的使用 以及javascript对其的操作

FRAMESET 标签是 FRAME 元素的容器。
HTML 文档可包含 FRAMESET 元素或 BODY 元素之一,两者不能同时使用。
框架将网页分成几个框窗,同时取得多个URL。用<FRAMESET> <FRAME> 即可,所有框架标记需要放在一个总起的 html 文档里,这个档案只记录了该框架如何分割 ,不会显示任何资料,所以不必放入 <BODY& ......

JavaScript内存泄漏

1、什么是闭包、以及闭包所涉及的作用域链这里就不说了。
2、JavaScript垃圾回收机制 
     JavaScript不需要手动地释放内存,它使用一种自动垃圾回收机制(garbage collection)。当一个对象无用的时候,即程序中无变量引用这个对象时,就会从内存中释放掉这个变量。
 
Code
 &nb ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号