1

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

今天的 JavaScript 代码片段是如何定义的?

其他答案如下:

  • 通过立即执行的工厂函数定义。

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

4

2 回答 2

2

我的猜测是您不清楚javascript“工厂函数”和构造函数之间的区别。根据 Addy Osmani 的书或本文,我通常会看到短语“立即调用的函数表达式”或 IIFE ,但我相信 IEFF 是对相同结构的引用。在 IEFF(使用他们的术语)中有这个基本公式:

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

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

于 2012-04-05T05:37:28.570 回答
0

您可以在Why AMD中查看以下示例代码

(function () {
     var $ = this.jQuery;
     this.myExample = function () {};
}());

这是立即执行的工厂函数的示例。所以这个函数会在解释的时候执行。在这个例子之前我们应该考虑加载 JQuery [因为它使用的是 JQuery]。这是RequireJS的工作,按照我们的顺序加载所需的 JavaScript 文件。

于 2012-09-05T10:14:40.287 回答