由于我对 RequireJS 和 Node.js(加上一般的 JavaScript)的了解有限,我通常会看看一些知名 JavaScript 库的源代码。每次我看到这样的东西:
( // Wrapping
function (root, factory) {
if (typeof exports === 'object') { // Node.js
var underscore = require('underscore');
var backbone = require('backbone');
module.exports = factory(underscore, backbone);
} else if (typeof define === 'function' && define.amd) { // Require.JS
define(['underscore', 'backbone'], factory);
}
}(this, function (_, Backbone) { // Factory function, the implementation
"option strict";
function Foo() {}
return Foo; // Export the constructor
})
); // Wrapping
我能理解的(希望如此):
- 当脚本不包含在
<script>
标签中时,包装代码的匿名函数会自动执行 - 此代码适用于 RequireJS 和 Node.js(
if
一开始就检查);函数的结果factory
要么分配给module.exports
(Node.js),要么用作函数的参数define
(RequireJS)。
Q1:这段代码在没有 RequireJS 和 Node.js 的情况下如何工作?if
并且else if
检查将失败,factory
函数永远不会执行并且脚本不会返回任何内容。
Q2this
:作为root
参数传递的目的是什么?它从未使用过