将带参数的函数移动到RequireJS

将带参数的函数移动到RequireJS,requirejs,dependencies,user-defined-functions,amd,Requirejs,Dependencies,User Defined Functions,Amd,我不仅对JavaScript比较陌生,而且对RequireJS(来自字符串C#background)也比较陌生。目前在我的网页上,我有许多JavaScript函数。每一个都有两个论点。想象一下,它们看起来是这样的: functionA(x1, y1) { ... } functionB(x2, y2) { ... } functionC(x3, y3) { ... } define(["knockout", "jquery", ...], function("ko","jquery", ...

我不仅对JavaScript比较陌生,而且对RequireJS(来自字符串C#background)也比较陌生。目前在我的网页上,我有许多JavaScript函数。每一个都有两个论点。想象一下,它们看起来是这样的:

functionA(x1, y1) { ... }
functionB(x2, y2) { ... }
functionC(x3, y3) { ... }
define(["knockout", "jquery", ...], function("ko","jquery", ...) {???} );
目前,这些函数存在于我的HTML页面上的标记中,我只需根据需要调用它们

我的函数依赖于KnockoutJS、jQuery和其他一些JS库。我目前有同步加载那些外部.js依赖项的脚本标记。但是我想使用RequireJS,以便根据需要异步加载它们。为了做到这一点,我计划将上述三个函数都移动到一个名为MyFunctions.js的外部.js文件(一种AMD“模块”)中。该文件将有一个define()调用(对RequireJS的define函数),该调用如下所示:

functionA(x1, y1) { ... }
functionB(x2, y2) { ... }
functionC(x3, y3) { ... }
define(["knockout", "jquery", ...], function("ko","jquery", ...) {???} );
我的问题是如何“包装”我的functionA、functionB和functionC函数,其中???,以便我可以根据需要在页面上使用这些函数。例如,在HTML页面上按钮的onclick事件处理程序中,我想调用function并传递两个参数;函数B和函数C也是如此

我不完全理解当这些函数包装在一个define中时如何公开它们,而define本身位于一个外部的.js文件中。我知道define确保在调用回调函数之前异步加载我列出的库,但在调用回调函数之后,我不明白网页的脚本标记如何使用我的函数。我是否需要使用require来确保它们可用,例如:

require(["myfunctions"],function({not sure what to put here})]
我想我了解RequireJS的基本知识,但我不知道如何包装我的函数,使它们位于外部.js文件中,不污染全局名称空间,但仍然可以从主页调用,以便将参数传递给它们。我想他们有很多方法可以做到这一点,但在回顾RequireJS文档和一些视频时,我不能说我了解如何


谢谢您的帮助。

只需让MyFunctions.js文件返回一个对象,您已将要公开的方法添加到该对象中,如下所示:

define([], function(){
    function myPrivateFunction(){
        console.log('in private function');
    }
    function myPublicFunction(){
        console.log('in public function');
    }
    function myOtherPublicFunction(){
        console.log('in the other public function');
    }

    return {
        functionA: myPublicFunction,
        functionB: myOtherPublicFunction
    };
});
为需要
MyFunctions
的函数指定参数的名称根本不重要。依赖项数组中的名称字符串和字符串的顺序很重要,函数的参数顺序也很重要,但参数的名称并不重要。例如

require('myFunctions', 'knockout', 'jquery', function(myFunctions, ko, $){
    //here we can use the myFunctions, ko and $ variables.

    //To call the public function, use the name which the function was 
    //exposed as; functionA
    myFunctions.functionA();
});
上述示例代码的工作原理与以下代码完全相同:

require('myFunctions', 'knockout', 'jquery', function(my, k, j){
    //In this example, your functions will be on the value of the 'my' variable, 
    //knockout will be the value of the 'k' variable and jQuery will be the 
    //value of the 'j' variable.

    //To call the public function, use the name which the function was 
    //exposed as; functionA
    my.functionA();
});