我是 Javascript 的新手,需要对这个脚本进行更改。然而,我注意到这行代码让我非常困惑。
function FIValidateForm(aForWhom, aDoNotShowWarning, aFromWhere)
{
try
{
PAIWarnings = '';
var pBlFalg = true;
if (pBlFalg)
pBlFalg = mfpCheckForFISave(aForWhom, aDoNotShowWarning, aFromWhere);
if (pBlFalg == true)
pBlFalg = PAIErrors();
if ((pBlFalg) && (FIValidateForm.arguments.length == 1))
mfpIFWarnings();
return pBlFalg;
}
catch (err)
{
logError(err, arguments.callee.trace());
}
}
在运行时,如果我在第三个 if
语句上放置一个断点并检查 FIValidateForm.arguments
,我可以看到一个包含 3 个项目的数组。第一个包含一个 string
,第二个是 null
,第三个是 undefined
。该数组的长度仍为 3。
我是否正确地假设无论将什么传递给此方法,FIValidateForm.arguments.length == 1
将始终为 false
?或者是否有其他一些我不知道的值/调用此方法的替代方法,以便 arguments.length
等于 1?
编辑:我看到 JS 有一个 arguments.length
和一个 Function.length
。后者返回预期的 个参数...那么当函数定义为 3 时,如何调用一个方法使值变为 1?
最佳答案
Am I correct in assuming that no matter what one were to pass to this method, FIValidateForm.arguments.length == 1 will always be false?
不,您可以通过这样做使其 FIValidateForm.arguments.length
1:
FIValidateForm(justOneArgHere);
arguments
表示函数的实际参数。 (请参阅下面关于 arguments
与 FIValidateForm.arguments
的 1。)
如果您想要函数的arity(形式声明参数的数量),那就是 FIValidateForm.length
并且它不会变化。
So then how does one call a method so that the value would be 1 when the function is defined with 3?
JavaScript 根本不强制要求形式参数的数量;您可以不带任何参数、一个参数或 15 个参数调用您的函数。如果未提供形式参数(声明的参数,如您的 aDoNotShowWarning
),则它在函数调用中的值将是未定义
。如果您提供的参数比声明的多,它们只能通过arguments
伪数组访问(在 ES5 及以下版本中)。 (在 ES2015 及更高版本中,您可以将最后一个参数设为“剩余参数”,这意味着它将是从该点开始的所有参数的数组。)
例子:
function foo(a, b, c) {
console.log(arguments.length);
console.log(foo.length);
}
foo(1);
foo(1, 2);
1 arguments
属性函数(例如,FIValidateForm.arguments
)是一个非标准的JavaScript 的扩展,它被严格模式明确弃用(上面的例子在严格模式下会抛出错误)。只需使用为普通函数定义的独立符号 arguments
(就好像它是局部变量一样)。
(在 ES2015 或更高版本中,您可以通过在参数声明中使用剩余符号来避免使用 arguments
。)
关于javascript - 这个陈述会评估为真吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39085694/