【问题标题】:How can I call a function within a closure within a variable?如何在变量内的闭包内调用函数?
【发布时间】:2013-09-09 06:08:36
【问题描述】:

我是java新手,但代码在解释下方 这是来自游戏的代码,但问题是:使用导航器功能,我在游戏中单击导航器,然后某种(ajax?)继续并被记录。但是当我使用我的 FireBug 控制台时,我无法发送带有返回行上方功能的消息。 基本上.. ThisFunction.* 显示的唯一函数是底部返回的函数。如何调用 Navigator 函数?我试过了: ThisFunction.a.navigator(args here);

,但它说 a 未定义.. 它也没有显示在自动完成列表中。

** 我删除了代码,因为它来自游戏。谢谢您的帮助! **

【问题讨论】:

    标签: javascript ajax debugging firebug


    【解决方案1】:

    你用这个有点把它钉在了头上:

    ThisFunction.* 显示的唯一函数是底部返回的函数

    这是语言的预期和有目的的功能。

    简短的回答:你必须从闭包中返回任何你想从外部访问的东西......这可能是 a 变量,或者它可能是一个 api,它本身可以访问 a 变量,同时保持它的私有性外部。这称为词法作用域,它是您的朋友。

    示例时间:

    var ThisFunction = (function() {
      var a = { navigator: "woot" };
      var b = function() {
        return a;
      }
    });
    ThisFunction.a; //a is null/undefined on the returned
    ThisFunction.b; //b is defined yay
    var aOUTSIDE = ThisFunction.b();
    aOUTSIDE.navigator; // "woot"
    

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures

    因此,在 A 中唯一可以得到的东西是那些在与 a 相同的“范围”内进行变化的东西。因此,要么将 A 返回范围之外,要么从范围内返回提供 API 以获取 A 或执行 A 内部的某些内容...

    【讨论】:

    • 在游戏中,当我点击导航器时,可以访问该函数,但是即使在 return 或 ThisFunction 中也没有的其他函数如何访问它
    • 谢谢,我终于弄明白了。复杂的权限让我退缩了。
    • 酷,很高兴你明白了。每当您遇到类似的问题时,请检查范围...这是语言的一个功能,您无法查看另一个范围(不在您的父范围树中)...因此,如果您需要查看范围,那么你需要要么返回那个东西,要么返回一个访问器 API 等。
    【解决方案2】:

    根据OTHERFUNCTIONSHERE 是什么,如果它们关闭了变量a,您可以从其中一个函数中访问它(顺便说一下,为什么要使用这种神秘的变量名称?)。否则,超出范围。

    【讨论】:

    • 没关系;在与a 相同范围内声明的任何函数都可以访问a(和a. navigator),因此如果OTHERFUNCTIONSHERE 中有一个这样的函数,您可以从那里访问它。
    • 我明白了.. 有一个日志功能,看起来它也执行命令。
    • 关闭是什么意思?
    • “闭包”是一个“关闭”定义它的范围的函数,这意味着它可以访问该范围。
    【解决方案3】:

    鉴于您使用的是 Firebug,ThisFunction.%a.navigator(... args) 应该可以工作(.% 是该语言的 Firebug-specific extension)。但正如其他答案所述,纯 JavaScript 是不可能的。

    【讨论】:

      猜你喜欢
      • 2016-09-04
      • 1970-01-01
      • 1970-01-01
      • 2012-08-18
      • 2013-02-09
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多