为什么jquery文档中的$ .getJSON调用是正确的?

时间:2013-02-19 06:23:24

标签: javascript jquery optional optional-arguments

我对jQuery文档有点困惑。我在看this page describing $.getJSON。代码示例是:

$.getJSON('ajax/test.json', function(data) {
  var items = [];

  $.each(data, function(key, val) {
    items.push('<li id="' + key + '">' + val + '</li>');
  });

  $('<ul/>', {
    'class': 'my-new-list',
    html: items.join('')
  }).appendTo('body');
});

但方法签名是jQuery.getJSON( url [, data ] [, success(data, textStatus, jqXHR) ] ),其中data是发送到服务器的对象,success是JSON请求成功返回时调用的方法。

那么为什么示例代码有效呢?它似乎跳过了第二个论点。我原以为正确的代码是:

$.getJSON('ajax/test.json', {}, function(data) {
// and then the same from here

我知道方括号表示[, data][, success]参数是可选的,但我想我不明白javascript如何处理可变数量的参数。

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

在jQuery源代码中:

// shift arguments if data argument was omitted
        if ( jQuery.isFunction( data ) ) {
            type = type || callback;
            callback = data;
            data = undefined;
        }

所以它有效

答案 1 :(得分:0)

参数数量:

arguments.length

然后他们检查参数的类型并确定你提供的参数。

例如:

if(typeof arguments[0] === 'string') // first parameter is a string so it must be url
if(typeof arguments[1] === 'object') // second parameter is an object so it must be data passed to server
if(typeof arguments[2] === 'function') // third parameter is a function so it must be callback