- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在像下面这样的简单 UMD 设置中,gốc rễ
Và nhà máy
在哪里/如何定义?
(function (root, factory) {
// environment detection here
console.log(root);
console.log(factory);
}(this, function (b) {
// module definition here
}));
UMD 派对我迟到了,如果这是一个愚蠢的问题,请原谅我...但是如果我运行上面的代码,我会看到 gốc rễ
返回窗口对象,并且nhà máy
返回一个函数。那么第一个参数(在本例中为 root)是否总是定义为窗口对象?第二个呢?他们是否实现了相同的跨浏览器?我到处搜索规范或引用来支持这一点,但找不到……有很多关于 UMD 奇迹的博客文章,但我找不到任何关于它如何神奇地工作的解释.
有人能简单解释一下这是如何工作的吗?
câu trả lời hay nhất
这是一个 IIFE(立即调用的函数表达式),解释得很好 đây .
简而言之,您正在创建一个只调用一次的函数,并向它传递两个参数,cái này
Và function(b)
。这两个参数在 IIFE 体内被命名为 gốc rễ
Và nhà máy
。
好处是 IIFE 的主体在“私有(private)范围”中独立工作。它之外的变量名没有效果,你没有冲突问题。
现在,回到您的问题,您将 cái này
作为参数传递。这是全局对象。在浏览器中它是 cửa sổ
而在 Node 中它是 toàn cầu
。在这两种情况下,在 IIFE 中您都将其称为 gốc rễ
,在您的模块中称为 b
。不管你怎么调用它,另一个优点是你的压缩器可以把它捡起来并将它翻译成 c
或其他东西而不会破坏你的代码。这与正常情况形成对比,在正常情况下,cửa sổ
hoặc tài liệu
或任何模块名称都无法缩小。
您还传递了一个名为 factory 的函数。这是你的模块。如果没有 AMD 或 CommonJS,您通常会这样做:
(function (root, factory) {
root.myModuleName = factory(root);
}(this, function (b) {
// module definition here
}));
这将创建您的模块并将其附加到全局对象,以便您可以使用它。工厂方法只有一个参数,通常需要传递全局对象。您还可以使用更多参数来传递任何模块依赖项:
(function (root, c, factory) {
root.myModuleName = factory(root, c);
}(this, jQuery, function (b, $) {
// module definition here
// You refer to jQuery as $ without having to call noConflict
}));
关于Javascript UMD - 根、工厂在哪里/如何定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32659231/
我正在尝试使用模块捆绑器 ParcelJS 构建一个模块。我希望这个特定模块对导入友好: 它应该是导入友好的 (ES6) 它应该是友好的(节点) 它应该是 script-src 友好的(浏览器) 它应
按照 Angular 教程,可以看到: 用于https://angular.io/docs/js/latest/guide/forms.html同时, 用于https://angular.io/d
我正在编写一个不可知的日志记录机制,它可以在浏览器和 nodejs 中运行(例如,nodejs 中缺少 console.debug)。 // UMD with no dependencies (fun
假设我有一个像这样的 UMD 模块(保存在 'js/mymodule.js' 中): (function (global, factory) { typeof exports === 'objec
我包含了一个需要 JQuery 2.2 的旧库,但我希望其他所有内容都使用最新版本的 JQuery。有问题的库混合使用 UMD(我认为),所以代码看起来像这样...... (function ($)
我正在定义一个 UMD 风格的模块,定义一个可以跨 CommonJS、AMD 和浏览器全局变量使用的模块,如下所示: (function (root, factory) { if (typeo
我正在创建我的第一个用于开源分发的 AngularJS 模块。我想以其他人易于使用的方式打包它。 UMD 项目提供了一个 pattern用于导出与 AMD、CommonJS(或至少 Node)和浏览器
我的设置 我正在将我的 .ts 模块“FooModule”编译成 UMD module在 Visual Studio 2015 中。我想扩展此 UMD 语法,以便在不存在模块加载系统时将模块作为后备注
我想将我的 React 组件打包为 umd lib。 下面是我的 webpack 设置: module.exports = { devtool: 'eval', entry: [ '.
我刚刚从 2.0.0-rc2 的 Angular QuickStart 跃进,并更新了 system-config.ts 文件来下载 rxjs 的 umd 文件,即 rxjs\bundles\Rx.u
我正在开发一个 javascript 库,它使用闭包编译器来组合/缩小和类型检查。为了避免噘嘴全局命名空间,我想使用 UMD 模式 & closue @export(or goog.exportSym
您好,我正在研究 RxJS。我可以通过在我的浏览器中引用它来简单地使用这个库: 它使用“Rx”的全局对象命名空间变量导入。我可以制作可观察对象并做所有有趣的事情。 当我将 src 更改为指向最新的
我已经安装了 three@^0.103.0,它有自己的类型定义。 在我项目的 src/global.d.ts 中我有: import * as _THREE from 'three' declare
我使用 browserify standalone option在以下 gulp 任务中生成一个 UMD 模块: gulp.task("bundle-source", function () {
我正在 .NET 4.0.30319.18444 上使用 IronPython 2.7.0.40 编写一些代码。在 IronPython 控制台中,如果我对我的模块进行任何更改,它们将不会生效(除非我
我在重写此代码以使其在“严格”模式下工作时遇到问题。由于“this”没有明确定义,我在编译时遇到 jshint 错误。我认为我的大脑没有足够的抽象思维来找到创造性的解决方案。任何帮助,将不胜感激。代码
我是 UMD 和 AMD 新手。我在 Browserify 中编写了一个 JS 库,并且刚刚接触到 UMD。我的理解是,如果我为每个模块都包含一段代码,我的模块应该能够在 CommonJs 和 AMD
我正在尝试加载 gridstack通过 ember-cli 在我的 Ember 应用程序中。我通过 bower 安装应用程序并导入到我的 ember-cli-build.js 文件中。它通过以下方式将
在像下面这样的简单 UMD 设置中,root 和 factory 在哪里/如何定义? (function (root, factory) { // environment detection
我正在尝试找出使用 UMD 工厂测试 Javascript 模块定义的最佳方法,类似于:https://github.com/umdjs/umd/blob/master/returnExportsGl
Tôi là một lập trình viên xuất sắc, rất giỏi!