在类 Vector2 本身中,如果我使用以下内容
Vector2.prototype.aaaScalar: ( function () {
var min = new Vector2();
return function ( minVal) {
min.set( minVal);
return this.aaa( min );
};
} )(),
报告min没有set方法,但是Vector2中有set方法
如果改成下面的,就一切OK了
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();不会返回一个完全创建的对象。
最佳答案
这里的问题不是你的关闭。就闭包而言,您的两个示例都是正确的... aaaScalar 被分配给您使用闭包中的 min 变量返回的内部函数。
两个片段之间的区别在于时间安排。在第一个示例中,var min = new Vector2()
在设置 aaaScalar 属性时执行...当 IIFE 运行时。在第二个示例中,在您实际调用分配给 aaaScalar 的函数之前,min = new Vector2()
不会运行。
我认为您会发现,在分配 aaaScalar 时,您从中获取 Vector2 的库尚未准备好,但在您实际调用 aaaScalar() 时,它已经准备好了。
关于javascript - 下面的函数闭包有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31954174/