如何在变量中的闭包内调用函数?

时间:2013-08-14 19:14:52

标签: javascript ajax debugging firebug

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

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

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

3 个答案:

答案 0 :(得分:1)

你有点用它来钉在头上:

  

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

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

简短的回答:你必须退出关闭你想要外部访问的任何东西......这可能是一个变量,或者它可能是一个api,它本身可以访问一个变量,同时保持它是私有的外观。这被称为词汇范围,它是你的朋友。

示例时间:

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的东西是在与“范围”相同的“范围”中变化的东西。所以你要么退出范围,要么从提供API的范围内返回一些东西,要么得到A,要么执行一些A的内部......

答案 1 :(得分:0)

取决于OTHERFUNCTIONSHERE是什么,如果它们关闭变量a,你可以从其中一个函数中访问它(顺便说一下为什么这些神秘的var名称?)。否则,它超出了范围。

答案 2 :(得分:0)

鉴于您使用的是Firebug,ThisFunction.%a.navigator(... args)应该有效(.%是该语言的Firebug-specific extension)。但正如其他答案中所指出的那样,纯粹的JavaScript是不可能的。