繁体   English   中英

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

[英]How can I call a function within a closure within a variable?

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

,但是它说a是未定义的。它也不会显示在自动填充列表中。

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

您用此位将其钉在了头上:

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/zh-CN/docs/Web/JavaScript/Guide/Closures

因此,唯一可以得到A的东西就是与a在同一“范围”内变化的东西。 因此,您要么在范围外返回A,要么从范围内返回某些东西,这些东西提供API以获得A或执行A的某些内部函数...

根据OTHERFUNCTIONSHERE是什么,如果它们关闭了变量a (为什么这样的隐式var名称呢?),则可以从这些函数之一中访问它。 否则,超出范围。

假设您使用的是Firebug, ThisFunction.%a.navigator(... args)应该可以正常工作( .%是该语言的Firebug特定扩展名 )。 但是,正如其他答案所指出的那样,使用纯JavaScript是不可能的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM