Javascript参数对象

时间:2016-01-04 20:38:14

标签: javascript jquery

我很难理解参数对象。在这段代码中,参数将看到什么函数?

getAjax('get_info', 'java_array', realVarName, cld.listArray, 0, '',           
'no_restrict', function() {
 show_list(arguments[0], sld);

    if (typeof(postFunc) == "function") {
        postFunc();
    }
 });

3 个答案:

答案 0 :(得分:3)

'参数'是具有任何函数的继承变量。它包含传递给函数的所有参数。例如,函数定义可能不会列出任何参数,但是调用可能包括' n'参数就可以了。然后,该函数仍然可以通过arguments数组访问所有这些函数。

答案 1 :(得分:1)

arguments object是一个类似于数组的对象,对应于传递给函数的参数。

在您的代码中,arguments[0]主要是undefined

答案 2 :(得分:0)

首先,arguments是一个对象,表示传递给当前函数的参数集。它自动存在于每个函数内部。您可以阅读更多相关信息here on MDN

因此,在您的情况下,arguments[0]将是getAjax()传递给您传递给它的回调的第一个参数,作为调用getAjax()时的最后一个参数。因此,它取决于您未向我们展示的getAjax()的内部行为。

让我们来看看代码的工作原理:

  1. 您对getAjax()进行函数调用并传递了许多参数。
  2. 其中一个参数是回调函数(最后一个参数)。
  3. getAjax()正在执行其工作时,它会在某个时刻调用该回调函数。
  4. 当它调用该回调函数时,它可以传递该回调一些参数。
  5. 在该回调函数中,arguments对象将表示getAjax()传递给它的任何参数。
  6. 因此,当(在该回调函数中),然后获得arguments[0]并将其传递给show_list()时,您将传递getAjax()传递给回调的第一个参数
  7. 只需为回调声明一个命名参数,就可以在不使用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; 对象会特别有用。 )。