我正在研究THREE.js,并注意到一种定义函数的模式,如下所示:
var foo = ( function () {
var bar = new Bar();
return function ( ) {
//actual logic using bar from above.
//return result;
};
}());
(实施例见光线投射方法这里)。
这种方法的正常变化如下所示:
var foo = function () {
var bar = new Bar();
//actual logic.
//return result;
};
将第一个版本与正常版本进行比较,第一个版本的不同之处在于:
- 它分配一个自动执行功能的结果。
- 它在此函数内定义了一个局部变量。
- 它返回包含使用局部变量的逻辑的实际函数。
因此,主要区别在于,在第一个变体中,在初始化时,bar仅分配一次,而第二个变体在每次调用时都会创建此临时变量。
关于为什么使用此方法的最好猜测是,它限制了bar的实例数量(只有一个),从而节省了内存管理开销。
我的问题:
- 这个假设正确吗?
- 此模式有名称吗?
- 为什么要使用它?