先推荐一篇介绍闭包的文章:
http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html
闭包的典型例子:
Java语言使用javassist工具实现类似闭包功能(java语言下还有asm工具和cglib工具也可以实现该功能):
import java.lang.reflect.*;
import javassist.*;
public class JavassistTest {
public static Method plus(int number) throws Exception {
CtClass cc = ClassPool.getDefault().makeClass("Temp");
CtMethod cm = new CtMethod(CtClass.intType, "plus_in", new CtClass[] { CtClass.intType }, cc);
cm.setModifiers(Modifier.PUBLIC + Modifier.STATIC);
cm.setBody("return $1 + " + number + ";");
cc.addMethod(cm);
return cc.toClass().getMethod("plus_in", int.class);
}
public static void main(String[] args) throws Exception {
Method plus_in = plus(20);
System.out.println(plus_in.invoke(null, 100));
}
}