如何使用参数动态加载javascript函数(在Dojo中使用Ajax)

如何使用参数动态加载javascript函数(在Dojo中使用Ajax),javascript,ajax,dojo,scope,Javascript,Ajax,Dojo,Scope,我正在实现一个require/load函数,它检索并执行一段远程javascript代码。它工作得很好,我正在使用一种变通方法,通过基本上声明全局变量来为它提供参数,但我想知道在这种情况下传递参数的最佳方式是什么。下面是加载远程脚本的函数 Module.require = function (moduleName , args){ if (! Module.has(moduleName)){ dojo.xhrGet({ url: 'module.r

我正在实现一个require/load函数,它检索并执行一段远程javascript代码。它工作得很好,我正在使用一种变通方法,通过基本上声明全局变量来为它提供参数,但我想知道在这种情况下传递参数的最佳方式是什么。下面是加载远程脚本的函数

Module.require = function (moduleName , args){
    if (! Module.has(moduleName)){
        dojo.xhrGet({
            url: 'module.require.php',
            handleAs: "javascript",
            content : {
                module : moduleName
            },
            load: function() {
            },
            error: function(errorMessage) {
                console.log('there was an error with Module.require()');
                console.error(errorMessage);
            }
        });
    }
};
我的第一个问题是,当获取并动态执行存储在
moduleName.js
中的代码时,执行
moduleName
的上下文是什么?如果它在函数
模块.require的范围内,那么我可以很容易地参考
args
。如果它是在全局范围(
窗口
)中执行的,那么我知道如何声明局部变量(匿名函数调用
(function(){}());
),但是如何传递参数呢?我希望有一个简单的方法来做到这一点,因为我不希望将所有的参数传递给服务器。不仅很难通过PHP解析它们,而且代码中可能有许多参数

EDIT:James Khoury提到了如何使用
f.apply()
f.call()
来传递参数,因此我现在需要知道的是脚本在执行时加载的上下文。如果它在函数的范围内,我想我可以像这样调用它
f.call(this,args)。如果我能做到这一点,是否还有调用匿名函数的方法?我这样做是因为我正在创建包装用户代码的模块,以确保用户声明的所有变量都保持本地,因此,最好确保包装函数也不是全局的

谢谢

我两个都看

(这是取自)

然后在函数
f()
中:

函数f(消息、数值、数据对象)
{
如果(此.x)
{
警报(this.x);
//或者,您可以只执行alert(x);
}
如果(arguments.length>2)
{
dataObj[“消息”]=“”
对于(变量i=0;i
我会同时考虑这两个问题

(这是取自)

然后在函数
f()
中:

函数f(消息、数值、数据对象)
{
如果(此.x)
{
警报(this.x);
//或者,您可以只执行alert(x);
}
如果(arguments.length>2)
{
dataObj[“消息”]=“”
对于(变量i=0;i
James,是
函数f(message,num.dataObj)
打字错误,还是num.--space--dataObj应该在那里。关于这一点,我还有两个问题,所以我将编辑question@puk您可以将局部变量附加到一个对象,然后
anonFunction.apply(上下文、参数)
然后可以访问变量
this.myVar
或仅
myVar
。。。在全局范围内,
寡妇
相同。(是的,这是一个输入错误,谢谢)James,
函数f(message,num.dataObj)
是一个输入错误,还是num.--space--dataObj应该在那里。关于这一点,我还有两个问题,所以我将编辑question@puk您可以将局部变量附加到一个对象,然后
anonFunction.apply(上下文、参数)
然后可以访问变量
this.myVar
或仅
myVar
。。。在全局范围内,
寡妇
相同。(是的,这是一个打字错误,谢谢)
var obj = { x: 15 };
f.call(obj)

var args = ["hello", 2, {data: "123"}];

f.apply(obj, args);
function f(message, num, dataObj)
{
    if (this.x)
    {
        alert(this.x);
        // Alternatively you could just do alert(x);
    }
    if(arguments.length > 2)
    {
        dataObj["message"] = ""
        for(var i =0; i < num; i++)
        {
             dataObj["message"] += message + "\n";
        }
        alert(dataObj.message + "\n" + dataObj.data); 
    }

}