今天看《Javascript高级程序设计》一书,其中对闭包下了一个定义:
闭包是词法表示包括不必计算的变量的函数。(原书第56页)
还给了一个简单的样例:
var t = "hello world";
function closure(){
alert(t);
}
因为变量t在函数closure之外定义,所以closure就是一个必包。
如果这样的话,用java模拟闭包有何难?
public class SimulateClosure{
private int num; public void setNum(int num){ this.num = num; } public void closure(int origin){ System.out.println(origin*num); }
}
客户端调用:
SimulateClosure sc = new SimulateClosure();
sc.setNum(1);
sc.closure(5);// 输出5
sc.setNum(2);
sc.closure(5);// 输出10
我写的这个例子是不是闭包?closure方法也使用了方法外部的字段。。客户端调用结果也不同。。
闭包就这么简单吗?还是我的理解有错误?请高手指教。
问题补充
达人们,你们在哪里??快来拍我
问题补充
谢谢猫姐!那我写的例子不是闭包,书中提供的例子是不是闭包呢?