由於我對RequireJS和Node.js的理解有限(通常加上JavaScript),我通常會看一些知名JavaScript庫的來源。每次看到這樣的事情:爲什麼這個JavaScript代碼(RequireJS和Node.js的模塊模式)工作?
(// 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>
標籤uncluded自動執行換行代碼中的匿名函數 - 此代碼與RequireJS和Node.js(最初的
if
檢查)一起使用;函數factory
的結果被分配給module.exports
(Node.js)或用作define
函數(RequireJS)的參數。
Q1:此代碼是如何工作沒有RequireJS和Node.js的? if
和else if
檢查將失敗,factory
函數從不執行並且腳本返回nothig。
Q2:通過this
作爲root
參數的目的是什麼?這是從來沒有使用
你確定它沒有RequireJS或Node.js嗎?我對JavaScript的理解有限(這可能是錯誤的)[JSFiddle](http://jsfiddle.net/aM3ZT/)讓我覺得你不能訪問Foo() – 2013-02-08 21:17:01
@nekman啊我看到它假定至少有Backbone可用。這是聰明的 – 2013-02-08 21:18:01
@JasonSperske不能確定100%,但看看nekman的答案...... – gremo 2013-02-08 21:22:00