CommonJS 规范中概述的 Define() 协议给我带来了什么?

发布于 2024-11-08 05:19:06 字数 1254 浏览 4 评论 0 原文

我了解 正确的名称间距< a href="http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth" rel="nofollow noreferrer">模块模式帮助与泄漏到全局范围相关的问题

我还完全看到了 require() 协议中提供的资源依赖管理的价值。 “nofollow noreferrer”>CommonJS 规范

然而,我对 AMD define() 函数的使用和目的的好处感到困惑。

定义的 CommonJS 签名是:

define(id?, dependencies?, factory);

另外...

  • 我看到人们 包装他们的模块 使用 define() 时的模式插件 两者都创建一个对象 全球范围。
  • 包含普通模块的文件 可加载图案插件 也是异步的。

起初,它“看起来”像是另一个插件包装器......直到我开始看到人们将它与模块模式一起使用。

所以我的问题是:

  • define() 协议是什么 CommonJS 规范中概述 买我吗?
  • 是不是更加雄辩一些?
  • 它是否意味着取代模块化模式?
  • 它是否更快?
  • 如果是这样,为什么?

I understand how things like proper name-spacing and the Module Pattern help issues associated with leaking into the global-scope.

I also completely see the value of resource dependency-management provided for in the require() protocol outlined in the CommonJS Specification.

However, I am befuddled as to the benefit of the AMD define() function's use and purpose.

The CommonJS signature for define is:

define(id?, dependencies?, factory);

Additionally…

At first, it "seemed" like yet-another plug-in wrapper...until I began to see folks use it alongside the Module Pattern.

So My Questions Are:

  • What does the define() protocol
    outlined in CommonJS specification
    buy me?
  • Is it somehow more eloquent?
  • Is it meant to replace the Modular Pattern?
  • Is it somehow faster?
  • If so, why?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浊酒尽余欢 2024-11-15 05:19:06
// main.js
require("foo.js", function(foo) {
    console.log(foo === 42); // true
});

//foo.js

/*
define(42);

define({
   "foo": "bar"
});

define(["bar.js"], function(bar) {
    return bar.foo;
});
*/

define(function() {
     return 42;
});

Define 是一种在不依赖全局作用域的情况下传递模块化对象的好方法。

不过,define 的特定 API 因库而异。

这里的基本思想是,您在文件中调用定义来定义该模块是什么。然后,当您需要该文件时,您将获得该模块。这消除了全球范围内的中间人。

但它并没有更快(它比注入全局范围更慢)。

使用 requiredefine 你只有两个全局值。

上面的特定 define 示例与 requireJS API 匹配

// main.js
require("foo.js", function(foo) {
    console.log(foo === 42); // true
});

//foo.js

/*
define(42);

define({
   "foo": "bar"
});

define(["bar.js"], function(bar) {
    return bar.foo;
});
*/

define(function() {
     return 42;
});

Define is a great way to pass modular objects back without relying on global scope.

The particular API of define varies from library to library though.

Here the basic idea is that you call define in a file to define what that module is. Then when you require the file you get the module. This cuts out the middle man that is global scope.

It's no faster though (It's slower then injecting into global scope).

Using require and define you only have two global values.

The particular define example above matches the requireJS API

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文