使用requirejs定义模块时为什么需要返回?

时间:2014-12-09 06:36:41

标签: javascript knockout.js requirejs

以下是我的代码:

HTML:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Using Require js for modular loading of scripts.</title>
    <!--Requirejs first loads the module that is specified in data-main .. So it will load the module init,init has two dependencies first is knockout so it loads the knockout first, then myAppViewModel next -->
    <script type="text/javascript" data-main="scripts/init.js" src="scripts/require.js"></script>
</head>
<body>
    Name : <span data-bind="text: myName"></span>
</body>
</html>

init.js

require(['knockout-3.2.0', 'myAppViewModel'], function(ko, myAppViewModel) {
    ko.applyBindings(myAppViewModel());
});

myAppViewModel.js

define(function () {
    return function myAppViewModel() {
        this.myName = 'Sudheer';
    };
});

如果我删除上述功能中的返回。它说myAppViewModel()不是构造函数。为什么在这种情况下需要返回?

1 个答案:

答案 0 :(得分:0)

要求js调用您传递给define()的函数以获取模块的实例。所以无论你从外部函数返回什么,它都是你的模块。

如果从那里的代码中删除return,则外部函数不返回任何内容,因此需要js为您的模块获取的值为undefined

这就是你需要一个return语句的原因。

http://requirejs.org/docs/api.html#funcmodule