void main() {
A one = new A(1);
A two = new A(2);
var fnRef = one.getMyId; //A closure created here
var anotherFnRef = two.getMyId; //Another closure created here
}
class A{
int _id;
A(this._id);
int getMyId(){
return _id;
}
}
根据dart 语言游览页面引用方法,这样的方法每次都会创建一个新的闭包。有谁知道它为什么这样做?我可以理解在定义方法体时创建闭包,因为我们可以在方法体的外部范围内使用变量,但是当只是引用像上面这样的方法时,为什么要创建闭包,因为方法体没有改变所以它不能使用该范围内可用的任何变量都可以吗?我注意到在上一个问题中我问过像这样的引用方法有效地将它们绑定到它们被引用的对象。所以在上面的例子中,如果我们调用fnRef()
它,它的行为会像one.getMyId()
这样,闭包只是用于绑定调用上下文吗?...我很困惑:S
更新
回应拉迪切克。这是否意味着:
void main(){
var fnRef = useLotsOfMemory();
//did the closure created in the return statement close on just 'aVeryLargeObj'
//or did it close on all of the 'veryLargeObjects' thus keeping them all in memory
//at this point where they aren't needed
}
useLotsOfMemory(){
//create lots of 'veryLarge' objects
return aVeryLargeObj.doStuff;
}