6

在backbone.js 的前几行中,我不明白他们为什么要在导出或要求上测试未定义

很明显,它是未定义的,因为他们没有设置它。如果它是一个全局(窗口)对象,那么他们会明确地说出来。

root.exports  // they don't do this
root.require

他们为什么要检查这个?

typeof exports !== 'undefined'

还有这个

if (!_ && (typeof require !== 'undefined'))

这从上面

!_

完整片段

(function(){
    var root = this, 
        previousBackbone = root.Backbone,
        slice = Array.prototype.slice,      
        splice = Array.prototype.splice,
        _ = root._,
        Backbone;
    if (typeof exports !== 'undefined') {
        Backbone = exports;
    } else {
        Backbone = root.Backbone = {};
    }
    Backbone.VERSION = '0.9.2';
    if (!_ && (typeof require !== 'undefined')) {
        _ = require('underscore');
    }
4

1 回答 1

4

我相信那是Backbone.js可以用作模块的。Common.js更多细节在这里:http ://wiki.commonjs.org/wiki/Modules/1.1

特别是这一点:

在模块中,有一个名为“exports”的自由变量,它是模块在执行时可以添加其 API 的对象。

此外,这一点涵盖了您的问题require

在一个模块中,有一个自由变量“require”,即一个Function。“require”函数接受模块标识符。"require" 返回外部模块的导出 API。

于 2012-09-27T13:51:46.323 回答