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
最初のチェック)。関数の結果は(Node.js)factory
に割り当てられるか、関数の引数として使用されます (RequireJS)。module.exports
define
Q1 : このコードは RequireJS と Node.js なしでどのように機能しますか? チェックは失敗し、if
関数は実行されず、スクリプトは何も返しません。else if
factory
Q2 :引数this
として渡す目的は何ですか? root
一度も使用されていません