【问题标题】:Declaring functions inside anonymous function在匿名函数中声明函数
【发布时间】:2012-11-19 06:31:48
【问题描述】:

我正在查看似乎声明需要调用才能运行的函数的代码。这个函数是在一个匿名函数中声明的。这是否意味着该块之外的任何东西都无法访问该功能?

(function () {
    var _d = vjo.dsf.EventDispatcher;
    var _r = vjo.Registry;

    function $1(p0) {
        return function (event) {
            return this.onSubmit(p0, event);
        };
    };
})();

为什么有人会这样做? 我不确定此代码中$ 的用途/相关性。

【问题讨论】:

  • $1 是一个有效的标识符;他们本可以将其称为function bananas(p0),这将是一回事。
  • @NullUserException 我个人认为我更喜欢这个
  • 有趣的事实:ಠ_ಠ 是一个valid identifier;另见:stackoverflow.com/questions/7451524/…
  • 有趣的事实:ಠ_ಠ 曾经是 @NullUserException 显示名称的一部分 :)(或者是其他人的?)
  • @bfavaretto 如果你说的是版主,那是Will's。我的显示名称中曾经有 ఠ_ఠ

标签: javascript function anonymous


【解决方案1】:

“这不是说这个块之外的任何东西都无法访问这个函数吗?”

是的。

“为什么有人会这样做?”

通常因为它包含仅供内部使用的代码,但在您的示例中,该函数从未被调用。

“我不是这段代码中“$”的目的/相关性。”

没有相关性。只是另一个有效的变量字符。

【讨论】:

  • 代码示例摘自一个非常流行的网站。知道为什么他们会把这段代码留在他们的脚本中吗?另外,我不确定这是否有区别,但代码是beautified
  • @Nate:我只能猜测$1 在某些情况下会被服务器端代码生成器取代。否则,我不知道他们为什么要这样做。
  • 我认为这可能是脚本缩小过程的产物。但这似乎是一个太方便的解释。
  • @Nate:也可以这样。也许 minifier 使用变量名中的$ 来标记死代码。只是一个疯狂的猜测。
【解决方案2】:

您发布的示例显示了在 javascript 中编写“模块”的常见模式,尽管其中存在错误。 $1 永远不会被调用并且是私有的,这意味着它可能不存在。然而,在一个有效的例子中,会有额外的代码调用 $1 和可能的其他函数。然后,当包含此代码时,整个事情都会评估,但全局命名空间不会被声明污染。

【讨论】:

  • 这是我最初的想法,但我正在从一个非常受欢迎的网站查看此代码。我不希望他们只是将随机无意义的代码扔到他们的脚本中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多