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