Javascript RequireJS:定义模块-TypeError:无法获取未定义或空引用的属性

Javascript RequireJS:定义模块-TypeError:无法获取未定义或空引用的属性,javascript,requirejs,Javascript,Requirejs,我有两个JavaScript文件file1.js和file2.js,我想用它们创建模块,以便与RequireJS一起使用 file1.js define('file1', ['file2'], function(myVar) { console.log(myVar); myVar.doSomething = function() { return { 'test': 13 } } }); define('file

我有两个JavaScript文件
file1.js
file2.js
,我想用它们创建模块,以便与RequireJS一起使用

file1.js

define('file1', ['file2'], function(myVar) {
    console.log(myVar);

    myVar.doSomething = function() {
        return {
            'test': 13
        }
    }
});
define('file2', ['someOtherDep'], function(someVarFromSomeOtherDep) {
    var myVar = (function() {
        var test = someVarFromSomeOtherDep.test.a;

        var doIt = function(var1) {
            // …
            return x;
        };

        return {
            doIt: doIt
        }
    }());
    console.log(myVar);
    return myVar;
});
如您所见,存在对
file2.js的依赖关系,我需要获取
myVar
。在这里,您可以看到
file2
和我在这个文件中所做的代码片段

file2.js

define('file1', ['file2'], function(myVar) {
    console.log(myVar);

    myVar.doSomething = function() {
        return {
            'test': 13
        }
    }
});
define('file2', ['someOtherDep'], function(someVarFromSomeOtherDep) {
    var myVar = (function() {
        var test = someVarFromSomeOtherDep.test.a;

        var doIt = function(var1) {
            // …
            return x;
        };

        return {
            doIt: doIt
        }
    }());
    console.log(myVar);
    return myVar;
});
如果我使用
file1
作为依赖项并调用
myVar.doSomething()
,我会得到
TypeError:无法获得未定义或空引用的属性“doSomething”
,并且
console.log
显示
[对象对象]{}

以下是依赖于
file1
的文件:

define(['file1'], function(myVar) {
    var test = myVar.doSomething();
});
那么,这里怎么了?似乎
myVar
没有从
file2
正确返回

两个console.log都显示
[object object]{}

真奇怪。你试过扩大视野吗?您应该能够看到您的方法

我获取
TypeError:无法获取未定义或空引用的属性“doSomething”
那么,这里怎么了?似乎myVar没有从file2正确返回

否。
myVar
没有从文件1正确返回-事实上,那里根本没有返回任何内容

define('file1', ['file2'], function(myVar) {
    console.log(myVar);

    myVar.doSomething = function() {
        return {
            'test': 13
        }
    }
    return myVar;
//  ^^^^^^^^^^^^^
});

您将从行
var test=myVar.doSomething()中获取错误(取决于文件1),而不是来自文件1(取决于文件2)。

file2.js
中,您缺少一个结束
在最后一行如果语法不是问题,您能验证文件1和文件2之间是否存在循环依赖关系吗?@Bergi:是的,您是对的,但这只是复制/粘贴的结果,在我的源代码中是正确的。@sma:不,没有循环依赖关系。顺便说一句,如果没有理由这样做,请避免显式地给模块命名。让RequireJS根据您的文件路径处理模块命名。您是对的,展开视图我可以看到函数
doSomething
。是的,我没有在这里归还。这是这里唯一的问题!非常感谢。