我很难理解参数对象。在这段代码中,参数将看到什么函数?
getAjax('get_info', 'java_array', realVarName, cld.listArray, 0, '',
'no_restrict', function() {
show_list(arguments[0], sld);
if (typeof(postFunc) == "function") {
postFunc();
}
});
答案 0 :(得分:3)
'参数'是具有任何函数的继承变量。它包含传递给函数的所有参数。例如,函数定义可能不会列出任何参数,但是调用可能包括' n'参数就可以了。然后,该函数仍然可以通过arguments数组访问所有这些函数。
答案 1 :(得分:1)
arguments object是一个类似于数组的对象,对应于传递给函数的参数。
在您的代码中,arguments[0]
主要是undefined
答案 2 :(得分:0)
首先,arguments
是一个对象,表示传递给当前函数的参数集。它自动存在于每个函数内部。您可以阅读更多相关信息here on MDN。
因此,在您的情况下,arguments[0]
将是getAjax()
传递给您传递给它的回调的第一个参数,作为调用getAjax()
时的最后一个参数。因此,它取决于您未向我们展示的getAjax()
的内部行为。
让我们来看看代码的工作原理:
getAjax()
进行函数调用并传递了许多参数。getAjax()
正在执行其工作时,它会在某个时刻调用该回调函数。arguments
对象将表示getAjax()
传递给它的任何参数。arguments[0]
并将其传递给show_list()
时,您将传递getAjax()
传递给回调的第一个参数只需为回调声明一个命名参数,就可以在不使用arguments
这样的getAjax('get_info', 'java_array', realVarName, cld.listArray, 0, '',
'no_restrict', function(obj) {
show_list(obj, sld);
if (typeof(postFunc) == "function") {
postFunc();
}
});
对象的情况下重写代码:
obj
在此备用实现中,您将回调函数的第一个参数命名为arugments[0]
并直接使用它而不是使用obj
。你的实现和它都会产生相同的结果。
当您知道要将哪些参数传递给函数时,通常最好使用命名参数(如我的备用实现中的arguments
),因为这会使代码更自我记录。但是当你不知道将多少个参数传递给一个函数或者你想将传递给你的函数的任何参数传递给其他函数(转发或代理)时,DBQ=D:\\Access\\Geocoding.accdb;
对象会特别有用。 )。