Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7170849
  • 博文数量: 3857
  • 博客积分: 6409
  • 博客等级: 准将
  • 技术积分: 15948
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-02 16:48
个人简介

迷彩 潜伏 隐蔽 伪装

文章分类

全部博文(3857)

文章存档

2017年(5)

2016年(63)

2015年(927)

2014年(677)

2013年(807)

2012年(1241)

2011年(67)

2010年(7)

2009年(36)

2008年(28)

分类:

2012-12-29 21:14:58

关于JavaScript闭包(Closure)网络中已经有很多相当详细的文章介绍了(详见参考学习资料),这里以一种简明的方式解释一下JavaScript闭包及其几个用途,希望对初学者快速理解JavaScript闭包有所帮助。
 
正文
 
1. 变量的作用域
[javascript] view plaincopy
var a0 = 0;  
function f0(){  
//...  
}  
function f1(){  
    var a1 = 1;  
    var f2 = function(){  
        var a2 = 2;       
        alert(a0 * a1 * a2);          
    }  
}  
一般情况下来讲(不使用JavaScript闭包方法):
f0可访问变量a0,不能访问变量a1,a2;
f1可访问变量a0,a1,不能访问变量a2;
f2可访问变量a0,a1,a2;
 
2. JavaScript闭包
JavaScript闭包简单理解定义:
在一个函数内定义的另外一个函数,上面代码中的函数f2就是JavaScript闭包。
 
3. JavaScript闭包用途
使上面代码中的f0可以访问变量a1,a2.
[javascript] view plaincopy
var a0 = 0;  
function f0(){  
    f1();  
}  
function f1(){  
    var a1 = 1;  
    var f2 = function(){  
        var a2 = 2;       
        alert(a0 * a1 * a2);          
    }  
    return f2();  
}  
f0();  
基于此的闭包其它用途请参考本文的学习资料和网络。
 
4. 原因解释
两点:
(1)f2定义在f1内部(JavaScript闭包);
(2)“return f2()”,使得f2在f0中运行,f2运行依赖于f1,所以f1不会被JavaScript的垃圾回收机制所回收,这样f0即通过f2访问到了f2和f1中的变量。
站长网  转载请注明
阅读(873) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~