在JS模块加载的上下文中,什么是立即执行的工厂函数?

时间:2012-04-04 14:27:57

标签: javascript require js-amd

在Require.js文档中,在名为Why AMD的部分中,询问以下内容:

今天如何定义JavaScript代码?

其他答案如下:

  • 通过立即执行的工厂功能定义。

我理解(至少我认为我这样做)javascript工厂函数只是一个返回对象新实例的函数,但我不明白这个问题在这个问题的上下文中意味着什么。有人可以解释一下吗?

2 个答案:

答案 0 :(得分:2)

我的猜测是你不清楚javascript“工厂函数”和构造函数之间的差异。根据Addy Osmani的书或immediately-invoked function expression,我通常会看到短语“this article”或IIFE,但我相信IEFF是对同一结构的引用。在IEFF中(使用他们的术语)有这个基本公式:

(function () { return {};})();

它基本上是用于创建函数作用域的javascript模式(/ hack),因此可以控制将该作用域内的一些但不是所有对象暴露给调用者。不要让“工厂函数”与构造函数混淆。您不要将new关键字与IIFE一起使用,而是使用传统的javascript构造函数。构造函数是关于创建对象实例的,通常您将创建许多实例,每个实例都具有唯一的状态。工厂函数可以帮助创建干净的封装模块,通常只需要调用一次,并在整个应用程序生命周期内获得对单个模块实例的引用。

答案 1 :(得分:0)

您可以在Why AMD

看到以下示例代码
(function () {
     var $ = this.jQuery;
     this.myExample = function () {};
}());

这是立即执行的工厂功能的示例。所以这个函数将在解释时执行。我们应该考虑在这个例子之前加载JQuery [因为它使用的是JQuery]。这是RequireJS根据我们的订单加载所需JavaScript文件的工作。