Javascript中的可选参数是如何工作的?

Javascript中的可选参数是如何工作的?,javascript,function,Javascript,Function,摘自w3在线教程: $("button").click(function(){ $("#div1").load("demo_test.txt", function(responseTxt, statusTxt, xhr){ if(statusTxt == "success") alert("External content loaded successfully!"); if(statusTxt == "error")

摘自w3在线教程:

$("button").click(function(){
    $("#div1").load("demo_test.txt", function(responseTxt, statusTxt, xhr){
        if(statusTxt == "success")
            alert("External content loaded successfully!");
        if(statusTxt == "error")
            alert("Error: " + xhr.status + ": " + xhr.statusText);
    });
});

函数调用如何知道正在传递哪些参数,比如说您只传递
statusTxt
xhr
,或者您只想传递
xhr


请对我放松点:)这是我第一个问题,这叫做回调。你不知道这就是为什么你在使用任何东西之前先阅读文档的原因。回调无法发送响应。或者可以将大量数据发送回。在你的情况下,从文件
我们将返回3个参数。但每个库都有自己的文档和返回结果。希望这有帮助。

这叫做回调。你不知道这就是为什么你在使用任何东西之前先阅读文档的原因。回调无法发送响应。或者可以将大量数据发送回。在你的情况下,从文件
我们将返回3个参数。但每个库都有自己的文档和返回结果。希望这有帮助。

它按传递给它的内容的顺序排列

就拿下面这个例子来说,

function test(callback) {
  var x = 1,
      y = 2,
      z = 3;

  if (typeof callback == 'function')
    callback(x, y, z);
}

test(function (z, y, x) {
  console.log(z);
});
输出是,

1
因为在原始代码中,我首先将等于
1
x
传递给
回调
。我给它取什么名字并不重要。传递给它的函数称为函数

注意


为了解释检查的
类型,我正在检查传递的变量是否实际上是一个函数,尽管在本测试中,它将成为一个函数,但在使用回调时,确保验证它总是很好的。

它按照传递给它的内容的顺序进行

就拿下面这个例子来说,

function test(callback) {
  var x = 1,
      y = 2,
      z = 3;

  if (typeof callback == 'function')
    callback(x, y, z);
}

test(function (z, y, x) {
  console.log(z);
});
输出是,

1
因为在原始代码中,我首先将等于
1
x
传递给
回调
。我给它取什么名字并不重要。传递给它的函数称为函数

注意


为了解释检查的
类型,我正在检查传递的变量是否实际上是一个函数,尽管在本测试中,它将成为一个函数,但在使用回调时,确保验证它总是很好的。

它是基于参数顺序进行的,你不能只传递第二个或第三个参数


在您的示例中,如果传入一个参数,它将是
responseText
,两个参数将是
responseText
statusTxt
。如果只想传递
statusTxt
,则必须为
responseText
传递一个
null
,然后根据参数顺序传递
statusTxt
的值,并且不能自己传递第二个或第三个参数


在您的示例中,如果传入一个参数,它将是
responseText
,两个参数将是
responseText
statusTxt
。如果只想传递
statusTxt
,则必须为
responseText
传递
null
,然后为
statusTxt

传递值,因为它从左到右分配从fnction调用传递的每个参数。假设您有这个函数,是从您那里复制的:

function someFunction(responseTxt, statusTxt, xhr){
    if(statusTxt == "success")
        alert("External content loaded successfully!");
    if(statusTxt == "error")
        alert("Error: " + xhr.status + ": " + xhr.statusText);
}
您希望在调用此函数时为变量statusTxt:“success”和xhr传递值。如果您这样调用函数:

someFunction(“成功”,你的未来)

这意味着“成功”将分配给参数responseText,而您的\u xhr将分配给statusTxt

通常,您只需将responseText设置为null,并将其余设置为所需,例如:

someFunction(null,“success”,您的\u xhr)

或者在函数定义中使用对象文字。下面是一个例子:

function someFunction(options){
    if(options.statusTxt == "success")
        alert("External content loaded successfully!");
    if(options.statusTxt == "error")
        alert("Error: " + options.xhr.status + ": " + options.xhr.statusText);
}
您的函数调用如下所示:

someFunction({statusTxt:“success”,xhr:your_xhr})

当然,如果不使用ResponseText,您需要检查它是否未定义


希望这有帮助。

简单地说,它不会,因为它会从左到右分配从fnction调用传递的每个参数。假设您有这个函数,是从您那里复制的:

function someFunction(responseTxt, statusTxt, xhr){
    if(statusTxt == "success")
        alert("External content loaded successfully!");
    if(statusTxt == "error")
        alert("Error: " + xhr.status + ": " + xhr.statusText);
}
您希望在调用此函数时为变量statusTxt:“success”和xhr传递值。如果您这样调用函数:

someFunction(“成功”,你的未来)

这意味着“成功”将分配给参数responseText,而您的\u xhr将分配给statusTxt

通常,您只需将responseText设置为null,并将其余设置为所需,例如:

someFunction(null,“success”,您的\u xhr)

或者在函数定义中使用对象文字。下面是一个例子:

function someFunction(options){
    if(options.statusTxt == "success")
        alert("External content loaded successfully!");
    if(options.statusTxt == "error")
        alert("Error: " + options.xhr.status + ": " + options.xhr.statusText);
}
您的函数调用如下所示:

someFunction({statusTxt:“success”,xhr:your_xhr})

当然,如果不使用ResponseText,您需要检查它是否未定义


希望这有帮助。

你按顺序去做。所以你使用第一个参数,你得到他们传递的第一个参数,检查我下面的答案以获得更多帮助。因为这是一个回调函数,你不能决定传递哪些参数。它们通过
.load()
传递给您的函数,并且它总是传递所有这些函数。不过,你可以忽略那些你不在乎的,你要按顺序去做。所以你使用第一个参数,你得到他们传递的第一个参数,检查我下面的答案以获得更多帮助。因为这是一个回调函数,你不能决定传递哪些参数。它们通过
.load()
传递给您的函数,并且它总是传递所有这些函数。不过,你可以忽略那些你不关心的问题。这是一个完美的答案,完全让我不再认为这与匹配exa有关