【问题标题】:Difference between single and multiple execution context in Javascript (Titanium)Javascript(Titanium)中单个和多个执行上下文之间的区别
【发布时间】:2012-07-26 06:28:59
【问题描述】:

我对 Javascript 中的单个和多个执行上下文感到非常困惑。 我提到了这个http://developer.appcelerator.com/blog/2010/08/execution-contexts.html 虽然我对 JS 上下文有一个很好的了解。 但是我不知道在 Titanium 中构建应用程序时使用单个或多个上下文什么时候比较好。

【问题讨论】:

  • 无法明确评论Titanium,但类似的情况存在于浏览器中,每个窗口和框架都有自己的全局执行上下文(链接的文章说只有一个全局上下文是不正确的对于整个浏览器应用程序,它是每个窗口或框架)。子窗口必须将父窗口中的全局变量引用为“opener.varName”,因为不合格的“varName”将在子窗口而不是父窗口中解析。

标签: javascript titanium appcelerator titanium-mobile appcelerator-mobile


【解决方案1】:

来自Best Practices Documentation(强调我的):

使用 Titanium Mobile,可以创建一个窗口,其 url 属性设置为 Javascript 文件的路径(相对于当前文件)。当窗口的 open 方法被调用时,相关的 JavaScript 文件被评估,创建一个辅助的“执行上下文”,因此,一个新的范围。除极少数情况外,应避免这种多活动 JavaScript 环境。

这些多个执行上下文会导致问题,因为没有范围 任何其他的可见性,这意味着在上下文之间共享数据是 不笨拙地使用应用程序级自定义是不可能的 事件(使用 Titanium.App addEventListener 和 fireEvent)。他们能 还会导致循环引用和可能的内存泄漏。有 生命周期问题也不清楚, 给定的 JavaScript 文件已被评估。

虽然这种方法有一些合理的用例,例如 一个“应用程序中的应用程序”,每个新窗口都需要一个“干净的石板” 不依赖于全局上下文,通常是带有 URL 的窗口 不应使用。

【讨论】:

  • 感谢 Adam,如何避免多个 JS 环境。如果需要打开窗口,它将是..有关此的任何提示
  • 主要是在创建windows的时候不要使用url属性。相反,请选择像 this 这样的 CommonJS 模块化方法。 Android 在执行上下文或 heavyweight windows 方面还有其他需要考虑的事项,您在问题中链接到的帖子中也对此进行了讨论。
  • 所以您的意思是使用 commonJS 方法打开一个窗口将在相同的上下文(环境)中打开该窗口。
  • 正确,前提是我们不使用前面提到的任何窗口属性。
  • "以前使用的窗口属性"..没有得到那个。你能详细说明一下吗?
猜你喜欢
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
  • 1970-01-01
  • 2014-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多