requirejs中非amd的调用函数

Calling function of non amd in requirejs

我已经阅读了这个 question & 我想更清楚地理解这个概念所以我创建了我的两个文件

lorem.js:

var lorem = {};

lorem.fun1 = function(){
    console.log('aaa');
};

ipsum.js:

var ipsum = {};
ipsum.color = 'a';

ipsum.fun1 = function(){
    lorem.fun1();
};

Ipsum 取决于 lorem。在垫片配置中,我做了这样的事情:

// Filename: main.js

// Require.js allows us to configure shortcut alias
// There usage will become more apparent further along in the tutorial.
require.config({
    baseUrl: 'js',
    paths: {
        /*jquery: [
            // 'https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min' ,
            'libs/jquery/jquery'
        ],
        backbone:[
            'libs/backbone/backbone'
        ],
        underscore:[
            'libs/underscore/underscore'
        ],*/
        ipsum: 'nonamd/ipsum',
        lorem: 'nonamd/lorem'
    },
    shim : {
        /*jquery : {
            exports : 'jQuery'
        },
        underscore : {
            exports : '_'
        },
        backbone : {
            deps : ['jquery', 'underscore'],
            exports : 'Backbone'
        },*/
        ipsum : {
            deps : ['lorem'],
            exports : 'Ipsum'
        }
    }

});

require(['ipsum'],function (Ipsum) {
    console.log(Ipsum);
});

但是,console.log(Ipsum) 在控制台中打印 undefined。我做错了什么?

你的错误在 shim 配置中。

  ipsum : {
            deps : ['lorem'],
            exports : 'Ipsum'
        }

应该是

  ipsum : {
            deps : ['lorem'],
            exports : 'ipsum'
        }

注意大小写从 'Ipsum' 更改为 'ipsum'

ipsum应该是ipsum.js中的全局变量。

在Javascript中,变量名是区分大小写的,所以ipsumIpsum是不同的。因为你没有定义 Ipsum,只定义了 ipsum,打印出来的是 undefined.