gpt4 book ai didi

javascript - 将参数传递给并执行存储在数组中的全局函数

转载 作者:行者123 更新时间:2023-11-28 15:36:05 24 4
gpt4 key购买 nike

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

//Globally Called and refilled with function names
var function_name = new Array();

//This is the function that executes the var that contains function name
function execute(){
var function_count = function_name.length;
while (function_count--)
{
window[function_name[function_count]](arguments);
}
}

//This is how I add the function with its parameters
function_name.push("GetStatusDetails("+ sampleData +")");

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

最佳答案

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

window[function_name[function_count]].apply(window, arguments);

但是,正如评论中提到的,您还需要在 function_name 数组中存储纯函数名称,并将参数传递给 execute,如

function_name.push("GetStatusDetails");
execute(sampleData);

但是你为什么要传递函数名称?只需传递函数即可。所以:

function_name.push(GetStatusDetails);

然后直接调用它,而不是通过名称将其从 window 对象中拉出:

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();

关于javascript - 将参数传递给并执行存储在数组中的全局函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25615061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com