你应该将IIFE与RequireJS一起使用
Should you use IIFE with RequireJS
如果您使用的是 RequireJS 并且使用 define
和 require
,那么使用 IIFE 也没有意义,因为每个模块都已经包装在 define
/require
中。是这样吗?
换句话说,这段代码
define(['app'], function(app)
{
app.run();
});
有任何差异/优势
(function() {
define(['app'], function(app)
{
app.run();
});
})();
一般来说,你不需要将IIFE与RequireJS一起使用,但有时你应该这样做。
如果您使用通常的define([... deps ...], function (...) {...})
格式,那么您只是从全局空间读取define
,并且您所做的所有其他内容都封装在您传递给define
的函数中。无论有没有 IIFE,您都可以泄露您想要泄露的内容并保持您想要保密的内容的私密性。
如果您正在编写希望能够在使用和不使用 RequireJS 的情况下运行的代码,则通常需要 IIFE。例如,这个:
(function () {
'use strict';
function factory () {
// Build our module...
return something;
}
if (typeof define === 'function' && define.amd)
define([], factory); // AMD environment: call define.
else
window.Foo = factory(); // Otherwise, leak into the global space.
})();
流行的库(例如jQuery)通常具有这样的代码,允许将它们与RequireJS(或其他AMD加载程序)和script
元素一起使用。这是非常普遍的。使用 IIFE 可以将factory
功能排除在全局空间之外。
无论如何,define()
函数都在全局范围内,因此在 IIFE 中调用它根本没有区别,而且有点多余。
如果将代码放在define
回调之外,情况会有所不同,但不应这样做,因为每个文件都应表示一个封装的模块。
我唯一能想到将 IIFE 与 RequireJS 一起使用的时间可能是当我通过在初始化之前调用require.config()
来配置我的应用程序时;但即便如此,如果我只是调用require.config()
并且外部没有任何代码,我仍然不会使用 IIFE。
在此示例中,无需使用 IIFE:https://github.com/vasilionjea/bower-requirejs-starter/blob/master/local/js/main.js
我希望这能回答你的问题。
- 如何将jquery ui与requirejs一起使用
- 将RequireJs与自定义JS插件一起使用
- Twitter Bootstrap js文件已加载,但无法与requirejs一起使用
- 将requirejs与Colorbox一起使用:未捕获的类型错误
- 无法让砌体与 RequireJS 一起工作
- 将闭包编译器的类型安全性与AMD(requirejs)结合在一起的最可靠方法是什么?
- jQuery 不能与 RequireJS 一起使用
- 你应该将IIFE与RequireJS一起使用
- AngularJS项目值得与RequireJS一起使用吗
- 如何使requirejs与jasmine和blanketjs一起工作以覆盖代码
- 让AngulaJS + Angular AMD + RequireJS与Karma和Jasmine一起工作时出错
- Yammer和RequireJS——在一起很开心吗?与否
- 让 requirejs 与 Jasmine 一起工作
- 让TypeScript、Karma、RequireJS和Chai一起工作
- 未定义gap与requirejs一起使用时会出现错误
- 将requirejs与node一起使用
- 无法使signalR与requireJS一起工作
- 将 RequireJS 与非 AMD JavaScript 文件一起使用
- 将 RequireJS 与遗留代码一起使用
- 我可以将System.Web.Optimization与AMD的加载程序(如requireJS)一起使用吗?