为什么在模块模式中将函数分配给变量?

时间:2013-10-08 18:29:54

标签: javascript revealing-module-pattern

Module Pattern example from Addy Osmani中,将私有函数分配给变量,如下例所示:

var myNamespace = (function () {

  var myPrivateVar, myPrivateMethod;

  // A private counter variable
  myPrivateVar = 0;

  // A private function which logs any arguments
  myPrivateMethod = function( foo ) {
      console.log( foo );
  };

  return {

    // A public function utilizing privates
    myPublicFunction: function( bar ) {

      // Increment our private counter
      myPrivateVar++;

      // Call our private method using bar
      myPrivateMethod( bar );

    }
  };

})();

我会简单地将私有函数编写为:

   function myPrivateMethod( foo ) {
      console.log( foo );
  };

如果函数没有用作委托,是否有任何理由将该函数分配给变量?我正在查看一些使用此模式的代码,我发现很难遵循。例如:

var _initializeContext = function() { // many lines of code }

1 个答案:

答案 0 :(得分:2)

这是函数声明与函数表达式问题。在某种程度上,这是一种风格选择。您需要注意的是,JS解释器会提升函数声明,而函数表达式则不会。有些人更喜欢使用函数表达式,因为他们不喜欢重新排列代码的想法。

您可能需要查看:

var functionName = function() {} vs function functionName() {} http://javascriptweblog.wordpress.com/2010/07/06/function-declarations-vs-function-expressions/ http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html