我了解 proper name-spacing 和 Module Pattern 之类的问题如何解决与 leaking into the global-scope 相关的问题。
我还完全看到 CommonJS Specification 中列出的require()
协议中提供的资源依赖关系管理的价值。
然而,我对AMD define()
函数的用途和目的的好处感到困惑。
定义的CommonJS签名是:
define(id?, dependencies?, factory);
另外...
define()
的时候
同时创建一个对象
全局范围。起初,它“看起来”像是另一个插件包装......直到我开始看到人们将它与模块模式一起使用。
所以我的问题是:
define()
协议是什么?
在CommonJS规范中概述
买我?答案 0 :(得分:2)
// 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;
});
定义是一种很好的方法,可以在不依赖全局范围的情况下传回模块化对象。
定义的特定API虽然因库而异。
这里的基本思想是在文件中调用define来定义该模块是什么。然后,当您需要该文件时,您将获得该模块。这削弱了全球范围内的中间人。
虽然它并不快(它比注入全球范围要慢)。
使用require
和define
,您只有两个全局值。
上面的特定define
示例与requireJS API