【问题标题】:Why are functions assigned to variables in the module pattern? [duplicate]为什么在模块模式中将函数分配给变量? [复制]
【发布时间】:2013-10-08 18:29:54
【问题描述】:

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 }

【问题讨论】:

  • var functionName = function() {} vs function functionName() {} 或许可以回答这个问题。两种形式之间的技术区别在于是否提升了function 或仅提升了var。但是,它已经处于范围的顶端,主要是一种风格选择。
  • 在这种情况下,两种编写私有函数的方式没有显着差异。这只是个人风格。我没有看到您在“显示模块模式”部分中提到的语法,它来自“模块模式”部分。
  • @Barmar 你说得对,我编辑了标题。

标签: javascript revealing-module-pattern


【解决方案1】:

这是函数声明与函数表达式的问题。在某种程度上,这是一种风格选择。您需要注意的是,函数声明会被 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

【讨论】:

    猜你喜欢
    • 2012-09-03
    • 1970-01-01
    • 2021-11-14
    • 2014-12-05
    • 2020-05-15
    • 2019-02-25
    • 2018-02-26
    • 2016-02-10
    • 2022-10-05
    相关资源
    最近更新 更多