努力了解如何确定某些功能参数的值

时间:2019-03-20 09:45:47

标签: javascript parameters function-parameter

我常常不理解如何确定某些功能参数的值。以以下代码段为例:

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'是一个未在程序中任何地方定义的参数,但它返回一个值。我无法确定在哪里调用了getItAll()并传递了res​​以外的其他值。此外,我们还有未在任何地方定义的res.ErrorHtml,res.BrowseTreeBreadCrumbs.indexOf,res.TableName等,但它们都返回不同的值。

我观看/阅读的所有教程中的参数都是有意义的,但是当我阅读代码片段时,由于上下文与教程中的内容不同,它们对我而言不再有意义。

编辑:请注意,代码中永远不会调用gotItAll(),而是将其本身作为这样的参数进行传递,因此造成混乱。据我所知,res占位符永远不会替换为值:

InventoryEditor.ItemEdit.AddNew(itemTypeUid, itemTypeName, gotItAll, failedCallBack);

2 个答案:

答案 0 :(得分:0)

从任何调用gotItAll传递的

res

res。无论是res对象的属性

名称res仅在该函数中使用,并且可能与用作参数的名称不同。

示例

funciton addOneToNumber(numberToAddTo)
{
   return numberToAddTo += 1;
}

function mainFunction()
{
   var newNumber = addOneToNumber(1)
}

编辑:

您可以使用javascript中的任何对象作为参数。在这种情况下,已使用该功能。看起来failedCallback也是一个函数。如果对服务器的调用失败,将调用该方法

InventoryEditor.ItemEdit.AddNew内的某个地方,gotItAllres调用,这可能是服务器从任何类型的调用中调用的结果

答案 1 :(得分:0)

您发布的代码段只是函数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中经常用于提供对异步任务(例如网络请求)的回调。