我常常不理解如何确定某些功能参数的值。以以下代码段为例:
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);
答案 0 :(得分:0)
res
res。无论是res对象的属性
名称res仅在该函数中使用,并且可能与用作参数的名称不同。
示例
funciton addOneToNumber(numberToAddTo)
{
return numberToAddTo += 1;
}
function mainFunction()
{
var newNumber = addOneToNumber(1)
}
编辑:
您可以使用javascript中的任何对象作为参数。在这种情况下,已使用该功能。看起来failedCallback
也是一个函数。如果对服务器的调用失败,将调用该方法
在InventoryEditor.ItemEdit.AddNew
内的某个地方,gotItAll
被res
调用,这可能是服务器从任何类型的调用中调用的结果
答案 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中经常用于提供对异步任务(例如网络请求)的回调。