- 浏览: 707539 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (272)
- Struts1.x (7)
- 事务 (2)
- Hibernate (11)
- 数据库 (14)
- JavaScript&Ajax (43)
- JSP&Servlet (2)
- Flex (1)
- 其它 (9)
- Java (22)
- 框架集成 (1)
- WebService (3)
- Tomcat (3)
- 加密和安全登录 (13)
- 基于原型的JavaScript (0)
- JavaDoc和Java编码规范 (3)
- CAS (1)
- 加密 (1)
- Axis2 (10)
- Ext2.x (3)
- SSH整合 (2)
- Ext (0)
- 正则表达式 (1)
- 设计模式 (4)
- 对象序列化技术 (3)
- CVS (2)
- Struts2 (6)
- Spring 2.x (7)
- Spring Security (2)
- Java 课程 (20)
- 程序员之死 (1)
- 软件测试 (6)
- UML (5)
- NetBeans (1)
- cxf (1)
- JMS (13)
- 设计 (5)
- ibatis2.x (3)
- Oracle (1)
- WebSphere (7)
- 概要设计 (1)
- DB2 (10)
- PowerDesigner (0)
- 软件工程 (5)
- rose (1)
- EA (1)
- LDAP (7)
- Portal&Portlet (3)
- MQ (10)
- ESB (4)
- EJB (2)
- JBoss (2)
最新评论
-
typeRos:
只有配置文件,没有代码么大神
Spring实现IBMMQ的JMS消息发布/订阅模式 -
panamera:
如果ActiveMQ服务器没有启动,这个时候消息生产者使用Jm ...
Spring JMSTemplate 与 JMS 原生API比较 -
lian819:
顶1楼, 引用文件, 配置属性, 太方便了
EXTJS 同步和异步请求 -
wilhard:
说得清楚明白
<%@ include file=""%>与<jsp:include page=""/>区别 -
刘琛颖:
总结的很好。受益了
javascript 父窗口(父页面)— 子窗口 (子页面)互相调用的方法
闭包
我没有自觉地学习过JavaScript。我必须快点了解它,因为我发现如果没有它,在实际工作中编写AJAX应用程序的准备就不会充分。开始,我感到我的编程水平好像降了几个级别。(JavaScript!我的C++朋友会怎么说?)但一旦我克服最初的障碍,我就发现JavaScript实际上是功能强大、表现力极强而且非常简练的语言。它甚至具有其它更流行的语言才刚刚开始支持的功能。
JavaScript的更高级功能之一是它支持闭包,这是C#2.0通过它的匿名方法支的功能。闭包是当内部函数(或C#中的内部匿名方法)绑定到它们外部函数的本地变量时所发生的运行时现象。很明显,除非此内部函数以某种方式被外部函数访问,否则它没有多少意义。实例可以更好说明这一点。
假设需要根据一个简单条件一个数字序列,这个条件是:只有大于100的数字才能通过筛选,并忽略其余数字。为此,可以编写类似图8中的函数。
Figure 8 根据谓词筛选元素
<script> function filter(pred, arr) { var len = arr.length; var filtered = []; // shorter version of new Array(); // iterate through every element in the array... for(var i = 0; i < len; i++) { var val = arr[i]; // if the element satisfies the predicate let it through if(pred(val)) { filtered.push(val); } } return filtered; } var someRandomNumbers = [12, 32, 1, 3, 2, 2, 234, 236, 632,7, 8]; var numbersGreaterThan100 = filter ( function(x) { return (x > 100) ? true : false; }, someRandomNumbers ); // displays 234, 236, 632 alert(numbersGreaterThan100); </script>
但是,现在要创建不同的筛选条件,假设这次只有大于300的数字才能通过筛选,则可以编写下面这样的函数:
var greaterThan300 = filter ( function(x) { return (x > 300) ? true : false; }, someRandomNumbers );
然后,也许需要筛选大于50、25、10、600 如此等等的数字,但作为一个聪明人,您会发现它们全部都有相同的谓词"greater than",只有数字不同。因此,可以用类似下面的函数分开各个数字:
function makeGreaterThanPredicate(lowerBound) { return function(numberToCheck) { return (numberToCheck > lowerBound) ? true : false; }; }
这样,您就可以编写以下代码:
var greaterThan10 = makeGreaterThanPredicate(10); var greaterThan100 = makeGreaterThanPredicate(100); alert(filter(greaterThan10, someRandomNumbers)); alert(filter(greaterThan100, someRandomNumbers));
通过观察函数makeGreaterThanPredicate返回的内部匿名函数,可以发现,该匿名内部函数使用lowerBound,后者是传递给makeGreaterThanPredicate的参数。按照作用域的一般规则,当makeGreaterThanPredicate退出时,lowerBound超出了作用域!但在这里,内部匿名函数仍然携带lowerBound,甚至在makeGreaterThanPredicate退出之后的很长时间内仍然如此。这就是我们所说的闭包;因为内部函数关闭定义它的环境(即外部函数的参数和本地变量)。
开始可能感觉不到闭包的功能很强大。但如果应用恰当,它们就可以非常有创造性地帮您将想法转换成代码,这个过程非常有趣。在JavaScript中,闭包最有趣的用途之一是模拟类的私有变量。
下一节:模拟私有属性
发表评论
-
JavaScript 代码压缩工具
2011-02-16 15:15 944见附件,免费工具。 -
在服务器端判断request来自Ajax请求(异步)还是传统请求(同步)
2009-11-26 13:38 10714在服务器端判断request来自Ajax请求(异步)还是传 ... -
转:用Javascript来关闭IE浏览器和FireFox浏览器
2009-06-03 11:08 2180原文地址:http://hi.baidu.com/suen ... -
JavaScript 解析 JSON
2009-02-25 20:36 0JSON (JavaScript Object Not ... -
JavaScript的四舍五入运算
2009-02-02 13:49 1786function ForDight(Dight,How) { ... -
JavaScript 使用面向对象的技术创建高级 Web 应用程序
2009-01-19 21:44 1514转载: JavaScript 使用面 ... -
在JavaScript中使用面向对象
2009-01-18 17:05 1128原文地址:http://www.cnblo ... -
应当这样编写 JavaScript 代码吗?
2009-01-17 23:09 1125应当这样编写 JavaScript 代码吗? 您已经看到Ja ... -
JavaScript模拟命名空间
2009-01-17 17:35 1332JavaScript模拟命名空间 在C++和C#中,命名 ... -
JavaScript 从类继承
2009-01-17 17:32 1278从类继承 到这里,我们已经了解了构造函数和原型对象如何使您在 ... -
模拟私有属性
2009-01-07 15:46 1134模拟私有属性 现在介绍闭包如何帮助模拟私有成员。正常情况 ... -
静态属性和方法
2009-01-05 18:15 1315静态属性和方法 有时,您需要绑定到类而不是实例的属性或方法, ... -
原 型
2009-01-05 17:58 1064原型 在使用JavaScript的面向对象编程中,原型对象 ... -
构造函数而不是类
2009-01-04 23:15 1397构造函数而不是类 前面提到过,有关JavaScript ... -
JavaScript 函数是最棒的
2009-01-04 19:25 1473JavaScript 函数是最棒的 在很多编程语言中,函数和 ... -
insertAdjacentElement方法
2008-12-29 18:08 2472语法: oElement = object . inse ... -
javascript 中定义private 方法
2008-12-26 12:40 2300出处:http://aoqi1883.blog.163.co ... -
event.returnValue和return false的区别
2008-12-25 19:52 26617<!DOCTYPE html PUBLIC " ... -
按“回车”键提交表单
2008-12-25 19:17 2563<!DOCTYPE html PUBLIC " ... -
DWR 同步机制
2008-12-25 19:03 1480被一个小问题所困扰,一直到昨天,我最后 ...
评论