了解RequireJS:究竟传递给匿名函数的是什么?

时间:2015-01-24 22:56:37

标签: javascript requirejs

我正在尝试使用RequireJS来处理我的网络项目。

为了测试,我写了两个迷你函数:

multiply.js

;function multiply(x, y) {
    return parseInt(x) * parseInt(y);
}

substract.js

;function substract(x, y) {
    return parseInt(x) - parseInt(y);
}

一切都完美无瑕,所以我肯定是在正确的轨道上,但仍有一些我不明白的事情。

main.js 看起来像这样:

define(['substract', 'multiply'], function(one, two) {
    console.log('substract(8, "4") --> ' + substract(8, "4"));
    console.log('multiply(10, 10) --> ' + multiply(10, 10));
});

这些功能都有效,但alert(typeof(one));告诉我它未定义。

我知道这个问题可能很基本,但为什么它是未定义的&什么传递给匿名函数?

1 个答案:

答案 0 :(得分:3)

你做了很多错事。

首先,您需要将multiplysubtract声明为 RequireJS模块,如下所示:

define(function () {
    return function multiply(a, b) {
        return parseInt(x) * parseInt(y);
    };
});

为您要声明的其他模块执行相同的操作。然后,像这样编写你的app模块:

define(['subtract', 'multiply'], function(subtract, multiply) {
    console.log('subtract(8, "4") --> ' + subtract(8, "4"));
    console.log('multiply(10, 10) --> ' + multiply(10, 10));
});

请注意,您在上面声明的模块将作为参数注入到app函数中。然后,您可以通过这些参数使用模块返回值。

是的,您使用的代码有效,但它没有正确使用RequireJS。它只是定义multiplysubtract 全局,而不是模块。 RequireJS的部分目的是将代码收集到不污染全局命名空间的模块中。


注意:我更正了您的拼写错误,并将“substract”的所有实例转换为“减去”。