这个JavaScript模式叫什么?为什么使用它?
我正在研究并注意到一种模式,其中函数的定义如下:这个JavaScript模式叫什么?为什么使用它?,javascript,closures,iife,Javascript,Closures,Iife,我正在研究并注意到一种模式,其中函数的定义如下: var foo = ( function () { var bar = new Bar(); return function ( ) { //actual logic using bar from above. //return result; }; }()); (示例请参见光线投射方法) 这种方法的正常变化如下所示: var foo = function () { var ba
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;
};
var tmpObject = new Bar();
function foo(){
// Use tmpObject.
}
将第一个版本与正常变化进行比较,第一个版本的不同之处在于:
它限制了对象初始化成本,并另外确保所有函数调用使用相同的对象。例如,这允许将状态存储在对象中以供将来调用使用 虽然它可能会限制内存使用,但GC通常会以任何方式收集未使用的对象,因此这种模式不太可能有多大帮助
此模式是的一种特定形式。它限制了对象初始化成本,并另外确保所有函数调用使用相同的对象。例如,这允许将状态存储在对象中以供将来调用使用 虽然它可能会限制内存使用,但GC通常会以任何方式收集未使用的对象,因此这种模式不太可能有多大帮助
此模式是的一种特定形式。我不确定此模式是否有更正确的名称,但在我看来它像一个模块,使用它的原因是封装和维护状态 闭包(由函数中的函数标识)确保内部函数可以访问外部函数中的变量
在您给出的示例中,通过执行外部函数返回内部函数(并将其分配给
foo
),这意味着tmpObject
继续存在于闭包中,并多次调用内部函数foo()
将在tmpObject
的同一个实例上运行,我不确定此模式是否有更正确的名称,但对我来说这看起来像一个模块,使用它的原因是封装和维护状态
闭包(由函数中的函数标识)确保内部函数可以访问外部函数中的变量
在您给出的示例中,通过执行外部函数返回内部函数(并将其分配给
foo
),这意味着tmpObject
继续存在于闭包中,并多次调用内部函数foo()
将在tmpObject
的同一实例上运行。您的假设几乎是正确的。让我们先回顾一下这些
private
关键字或其他功能
但是,如果您每次都需要普通对象,那么这种模式可能不会增加任何价值。您的假设几乎是正确的。让我们先回顾一下这些
private
关键字或其他功能
var tmpObject = new Bar();
module.exports = function foo(){
// Use tmpObject.
};
var foo = require('./foo');