类Vector2本身,如果我使用以下
Vector2.prototype.aaaScalar: ( function () {
var min = new Vector2();
return function ( minVal) {
min.set( minVal);
return this.aaa( min );
};
} )(),
它报告min没有set方法,但是在Vector2中有set方法
如果更改为以下内容,一切正常
Vector2.prototype.aaaScalar: ( function () {
var min;
return function ( minVal) {
if ( min === undefined ) {
min = new Vector2();
}
min.set( minVal );
return this.aaa( min );
};
} )(),
编辑:我检查了第一种情况,调用var min = new Vector2();没有给我一个完全创建的对象。
答案 0 :(得分:1)
这里的问题不是你的关闭。关于闭包,你的两个例子都是正确的... aaaScalar被分配给你正在返回的内部函数,并在其闭包中使用min变量。
两个片段之间的区别在于时间。在第一个示例中,在设置aaaScalar属性时执行var min = new Vector2()
...当IIFE运行时。在第二个示例中,在您实际调用分配给aaaScalar的函数之前,min = new Vector2()
不会运行。
我认为你会发现你从中获取Vector2的库在分配aaaScalar时没有准备好,但是当你实际调用aaaScalar()时已经准备好了。