2015-07-10 23 views
2

我查了很多代码,我已经看到了很多人在做有什么好处导出函数调用自比功能直接返回

module.exports = (function(){ 
    return { 
    functionA: function() { 

     } 
    }, 
    functionB: function() { 

    } 
    }; 
})(); 

这样,为什么不只是做

module.exports = { 
    functionA: function() { 

    }, 
    functionB: function() { 

    } 
}; 

谢谢!

+0

在第一个示例中,自调用函数保留内函数的作用域/上下文。有关Node.js模块的更多信息,请参阅http://stackoverflow.com/questions/19850234/node-js-variable-declaration-and-scope。 – kixorz

回答

3

你的第一个例子可以隐藏,可以与你的回报分享自己的闭包范围内的变量对象的方法。该举例来说,如果你做了以下...

var foo = (function(){ 
    var x = 2; 
     return { 
     addToTwo: function(y){ 
     return x + y; 
     }, 
     subtractFromTwo: function(y){ 
     return x - y; 
     } 
    } 
}; 

上面的例子表明,x变量受到保护,addToTwosubtractFromTwo之间共享。第二个示例仅允许您在没有相同保护的情况下将x作为对象的一部分。

module.exports = { 
    x: 3, 
    functionA: function() { 
    return this.x; 
    }, 

}; 

x可以在这个例子中改变。

1

这些完全一样。这是一个文体决定。

按照Node.js文档:

的局部变量模块将是私有的,仿佛模块被包裹在一个函数。

你也可以这样来做:

module.exports.functionA = function() { 

}; 

module.exports.functionB = function() { 

}; 

或者:

// either method for creating a function works 
function functionA() {} 

var functionB = function() {} 

module.exports = { 
    functionA : functionA, 
    functionB : functionB 
}; 
+0

为什么这会降低投票率?这是一个信息丰富的答案。它并没有真正回答为什么人们这样做,但无论如何,这个问题没有很好的答案。 – Pointy

0

直接调用函数的最大优点之一是使用了不能以单独方式实现的closures,所以从字面上看,它们是不一样的。

相关问题