Javascript 向数组中存储的全局函数传递参数并执行这些函数

Javascript 向数组中存储的全局函数传递参数并执行这些函数,javascript,function,Javascript,Function,我有一个包含函数名的全局变量。我可以在没有参数的情况下执行函数,但是在传递了一些参数之后,我在下面得到了这个错误。 “未捕获类型错误:未定义不是函数” 你们能用这个来指导我吗?我是javascripting新手。使用上面的函数。谢谢大家 function_name.push("GetStatusDetails("+ sampleData +")"}); 在这里,您不是要推回一个函数,而是函数调用的结果GetStatusDetails(sampleData)窗口不包含签名的密钥,因此尝试使用窗口

我有一个包含函数名的全局变量。我可以在没有参数的情况下执行函数,但是在传递了一些参数之后,我在下面得到了这个错误。 “未捕获类型错误:未定义不是函数”

你们能用这个来指导我吗?我是javascripting新手。使用上面的函数。谢谢大家

function_name.push("GetStatusDetails("+ sampleData +")"});
在这里,您不是要推回一个函数,而是函数调用的结果
GetStatusDetails(sampleData)
<代码>窗口不包含签名的密钥,因此尝试使用
窗口[…]
查找它会返回
未定义的
。当您尝试使用
窗口[…](参数)
调用它时,这就是产生错误的原因,因为您无法“调用”未定义的

sampleData
应该在调用时被传递到
execute()
,并且您应该向后推函数的名称:

function_name.push("GetStatusDetails");
此外,
参数
是参数数组,而不是实际参数。因此,
GetStatusDetails()
必须遍历数组才能找到实际参数。去看看@torazaburo给出正确答案的答案

在这里,您不是要推回一个函数,而是函数调用的结果
GetStatusDetails(sampleData)
<代码>窗口
不包含签名的密钥,因此尝试使用
窗口[…]
查找它会返回
未定义的
。当您尝试使用
窗口[…](参数)
调用它时,这就是产生错误的原因,因为您无法“调用”未定义的

sampleData
应该在调用时被传递到
execute()
,并且您应该向后推函数的名称:

function_name.push("GetStatusDetails");

此外,
参数
是参数数组,而不是实际参数。因此,
GetStatusDetails()
必须遍历数组才能找到实际参数。去看看@torazaburo给出正确答案的答案。

你不能使用这样的参数。这将导致参数伪数组作为第一个参数传递。你需要做什么

window[function_name[function_count]].apply(window, arguments);
但是,如注释中所述,您还需要在
函数名
数组中存储纯函数名,并将参数传递给
执行
,如中所示

function_name.push("GetStatusDetails");
execute(sampleData);
但是为什么要传递函数名呢?只需传递函数即可。因此:

function_name.push(GetStatusDetails);
然后直接调用它,而不是按名称将其从
窗口中拉出:

function_name[function_count].apply(window, arguments);
如果要将函数+参数排队等待以后执行,请尝试以下操作:

//Array of functions to be called
var function_array = new Array();

//This is the function that executes the functions in the array
function execute(){
    var function_count = function_array.length;
    while (function_count--) 
    {
       function_array[function_count]();
    }
}

//This is how I add the function with its parameters
function_array.push(function() {
    GetStatusDetails(sampleData);
});
更好的编程实践是按照以下思路封装其中的一些内容:

var FunctionQueue = {
    _queue: [],
    queue : function(fn) { this._queue.push(fn); },
    execute: function() { var fn; while (fn = this._queue.pop()) { fn(); } }
};

FunctionQueue.queue(function() { GetStatusDetails(sampleData); });
FunctionQueue.execute();

不能使用这样的参数。这将导致参数伪数组作为第一个参数传递。你需要做什么

window[function_name[function_count]].apply(window, arguments);
但是,如注释中所述,您还需要在
函数名
数组中存储纯函数名,并将参数传递给
执行
,如中所示

function_name.push("GetStatusDetails");
execute(sampleData);
但是为什么要传递函数名呢?只需传递函数即可。因此:

function_name.push(GetStatusDetails);
然后直接调用它,而不是按名称将其从
窗口中拉出:

function_name[function_count].apply(window, arguments);
如果要将函数+参数排队等待以后执行,请尝试以下操作:

//Array of functions to be called
var function_array = new Array();

//This is the function that executes the functions in the array
function execute(){
    var function_count = function_array.length;
    while (function_count--) 
    {
       function_array[function_count]();
    }
}

//This is how I add the function with its parameters
function_array.push(function() {
    GetStatusDetails(sampleData);
});
更好的编程实践是按照以下思路封装其中的一些内容:

var FunctionQueue = {
    _queue: [],
    queue : function(fn) { this._queue.push(fn); },
    execute: function() { var fn; while (fn = this._queue.pop()) { fn(); } }
};

FunctionQueue.queue(function() { GetStatusDetails(sampleData); });
FunctionQueue.execute();

您在哪里调用
exexute
函数?从按钮单击事件和其他。。。我希望这样,我只是有问题如何传递参数。请参阅上面的最后一行代码。如果您对我如何传递参数有建议。我做错了吗?请帮助..您传递的参数不正确。您正在将类似于
“GetStatusDetails()”
的内容推入数组,因此调用
窗口['GetStatusDetails()']
而不是
窗口['GetStatusDetails']
不,我唯一关心的是如何将参数传递到函数中。窗口['GetStatusDetails']运行良好我唯一的问题是如何在函数名上添加参数。谢谢。您在哪里调用
exexute
函数?从按钮单击事件和其他。。。我希望这样,我只是有问题如何传递参数。请参阅上面的最后一行代码。如果您对我如何传递参数有建议。我做错了吗?请帮助..您传递的参数不正确。您正在将类似于
“GetStatusDetails()”
的内容推入数组,因此调用
窗口['GetStatusDetails()']
而不是
窗口['GetStatusDetails']
不,我唯一关心的是如何将参数传递到函数中。窗口['GetStatusDetails']运行良好我唯一的问题是如何在函数名上添加参数。谢谢。好吧,让我解释清楚。。。这就是我添加函数名的方式,包括它的参数function_name.push(“GetStatusDetails(“+sampleData+”));这就是我通过调用execute()来执行它的方式。这将执行包括其参数在内的推送参数名,但失败。现在,我的问题是,我是否将它错误地传递给了全局变量,它是函数的存储,并且应该包括函数的参数。请谢谢。@user3932204不,您没有添加包含其参数的函数名,您只是传入字符串
“GetStatusDetails(x)”
(其中
x
sampleData
)。这个函数从未被调用过(我在我现在编辑的答案中错误地说了),但当使用
窗口[[“GetStatusDetails(x)]”
查找它时,表达式返回
未定义的
,因为窗口不包含名为
“GetStatusDetails(x)”
的属性,而是函数名
“GetStatusDetails”
。您需要将实际参数传递给
execute
(即
execute(sampleData)
)好的,让我解释清楚……这就是我