首页 > 解决方案 > 努力了解某些函数参数的值是如何确定的

问题描述

我经常不明白某些函数参数的值是如何确定的。以下面的代码片段为例:

function gotItAll(res) {

$('#actionscreen').modal('hide')

if (res.ErrorHtml != "" && res.ErrorHtml.substring(0,31) != "Error copying to sub data table") {
    
    document.getElementById('GridView').innerHTML = res.ErrorHtml;
    InfoMessage("Error", res.ErrorHtml);
} else {

    if (res.BrowseTreeBreadCrumbs != null) {
        //generateBrowseTreeHtml(res);
        sessionStorage.setItem("browseTreeBC", res.BrowseTreeBreadCrumbs);
        if (res.BrowseTreeBreadCrumbs.indexOf("-1") > 0 || res.BrowseTreeBreadCrumbs.indexOf("- -1") > 0 || res.BrowseTreeBreadCrumbs.indexOf("- -999") > 0 || res.BrowseTreeBreadCrumbs.indexOf("-999") > 0 || res.BrowseTreeBreadCrumbs.indexOf("-999") > 0 || res.BrowseTreeBreadCrumbs.indexOf("</b>  </span") > 0) {
            $('#breadCrumbsID').hide();
        }
    }
    
    BaseTable = res.TableName; 
    recs = res.records;

'res' 是一个我在任何地方都找不到定义的参数,但它返回一个值。我无法确定在哪里调用了 gotItAll() 并传递了 res 以外的值。此外,我们还有 res.ErrorHtml、res.BrowseTreeBreadCrumbs.indexOf、res.TableName 等,它们似乎没有在任何地方定义,但它们都返回不同的值。

标签: javascriptparametersfunction-parameter

解决方案


您发布的代码片段只是功能declaration。基本上,snipper 定义了一个名为 的函数的存在,该函数gotItAll将一个参数作为输入。参数被调用res,所以函数内部,这个词res是指函数的参数。

让我们以一个简单的函数为例:

function double(x) {
  return x * 2
}

此函数也作为参数,称为x. 在函数内部,您将其称为x.

当你想要use函数时,你调用函数并给你一个参数,例如:

double(2) // returns 4
double(4) // returns 8
double(7) // returns 14

如您所见,我们可以向函数传递double不同的值。当您调用 时double(4),基本上该函数会考虑x = 4,因此每次在您使用的函数声明x中,您都将使用该值4

您还可以将不同的变量传递给函数:

var y = 10
double(y) // returns 20

和以前一样,你给函数变量y,其值为 10。所以基本上程序x = y会这样做,并且每次它在函数声明中引用时x,都会使用 的值y

回到你的例子。我不知道该函数的作用,但基本上res是将传递给函数的参数的占位符名称。可以从代码周围调用gotItAll(variableName)该函数,并且该函数将被执行考虑res = variableName。在您粘贴的狙击手中,仅声明了该函数,但没有该函数的实际用法示例,这就是为什么您看不到res来自何处的原因。

编辑:在您发表评论后,我意识到您实际上指的是什么。实际上,在 Javascript 中,您可以将函数作为另一个函数的参数传递。double以上面声明的函数为例。现在我想创建一个函数,只有当它们是偶数时才将数字加倍。我可以声明:

function doubleEven(x, doublingFunction) {
  if (x % 2 === 0) {
    return doublingFunction(x)
  } else {
    return x
  }
}

我可以将其用作:

doubleEven(2, double) // returns 4
doubleEven(5, double) // returns 5

基本上,我double作为参数传递给doubleEven函数。所以,在doubleEven声明内部,doublingFunction等于double,所以它是一个函数。

当然在这个例子中这是愚蠢的,没有必要传递一个函数来加倍一个数字。然而,这在 javascript 中被大量使用,以提供对异步任务的回调,例如网络请求。


推荐阅读