我明白事情是怎样的正确的名称间距 https://stackoverflow.com/questions/881515/javascript-namespace-declaration和模块模式 http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth帮助相关问题泄漏到全局范围 https://stackoverflow.com/questions/5951228/what-is-meant-by-leaking-into-global-scope.
我也完全看到了资源依赖管理中提供的价值require()
中概述的协议CommonJS 规范 http://www.commonjs.org/.
然而,我对AMD的好处感到困惑define()
函数的用途和目的。
定义的 CommonJS 签名是:
define(id?, dependencies?, factory);
此外…
- 我看到人们包装他们的模块
模式插件define() https://stackoverflow.com/questions/4869530/requirejs-how-to-define-modules-that-contain-a-single-class什么时候
两者都创建一个对象
全球范围。
- 包含普通模块的文件
可加载图案插件
也是异步的。
起初,它“看起来”像是另一个插件包装器......直到我开始看到人们将它与模块模式一起使用。
所以我的问题是:
- 什么是
define()
协议
CommonJS 规范中概述
买我吗?
- 是不是更加雄辩一些?
- 它是否意味着取代模块化模式?
- 它是否更快?
- 如果是这样,为什么?
// 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 因库而异。
这里的基本思想是,您在文件中调用定义来定义该模块是什么。然后,当您需要该文件时,您将获得该模块。这消除了全球范围内的中间人。
但它并没有更快(它比注入全局范围更慢)。
Using require
and define
你只有两个全局值。
特别是define
上面的例子匹配要求JS http://requirejs.org/ API
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)