closures, inner class and 函数指针

一直不是很理解这三个感念之间的区别。Java是面向对象的编程语言,这点与现在流行的面向函数的动态编程语言不同。Javascript就是后者的一个例子。函数可以独立于对象存在,(或者说它本身就是一种对象)。

 

Java里没有函数指针,但可以向函数中传入一个匿名内部类模拟这种行为。

 

Java目前还未引入closures, 但基于JVM的Groovy已经有Closures概念。在Groovy中,所谓Closures就是一段大括号括起来的代码段。这段代码按照Java的习惯一般只能存在于函数中(初始化代码除外)并以函数名的方式调用。在Groovy中,这段代码可以赋给一个变量,通过这个变量来调用这段代码(很多时候放在大括号中直接匿名使用)。

 

那么代码段与Closures的区别是什么呢?代码段一般是虚拟机碰到这段代码时就执行(方法调用,初始化,回调方法)。Closures只有在它的call()方法被调用时才执行。理解的不是很清楚,详细请参考:http://groovy.codehaus.org/Closures+-+Informal+Guide

 

闭包有几个特点:

1. 可以访问闭包范围外的变量(这点是不是跟Java中内部类相似?)

2. 可以匿名用在任何允许用闭包的地方,比如Groovy的list的collect, each 调用中

 

 

 

未完。

你可能感兴趣的:(JavaScript,java,编程,虚拟机,groovy)