【问题标题】:Is a parameter count availabe in Javascript for an anonymous invoked function?Javascript 中的参数计数是否可用于匿名调用的函数?
【发布时间】:2015-02-19 23:53:30
【问题描述】:
(function (a, b, c) {

  console.log(arguments.length); // 2

} (1, 2) )

当上述函数运行时,该函数可以通过 arguments 对象的 length 属性告诉它是用两个参数调用的。

由于函数定义中列出了 a、b 和 c,函数是否还有一种方法可以告诉它需要 3 个参数?

在上述函数中:

console.log( what?) === 3?

我通读了这个答案Get a function's arity,但它需要对函数的引用(例如名称),并且没有回答我关于 console.log 在函数内的问题。

【问题讨论】:

  • 实际上我确实找到了Finding the number of function parameters in JavaScript,它被关闭了。但是,我确实知道“arity”这个词,这将是我在 this 之后的下一次尝试……:-)
  • 不,就这样吧。它将作为不知道确切术语的其他人的路标。 (删除问题对你的业力不利)
  • 不,.length 不需要函数有名称。您只需要一个对函数对象的引用,就像您调用它时所需要的一样。在 IEFE 中,您可以使用 arguments.callee,但这是被鄙视的,最好为您的函数命名;或者只使用一个常量。

标签: javascript function parameters arguments


【解决方案1】:

您可以name your function expression[1] 并使用该引用通过其.length property 获取函数的arity:

(function iefe(a, b, c) {
    console.log(arguments.length); // 2
    console.log(iefe.length); // 3
}(1, 2));

1:如果您不关心 oldIE 错误。如果您这样做并在草率模式下工作,arguments.callee 可能是更好的选择。当然,您也可以使用标识符泄漏函数声明或变量赋值,或者 - 因为您总是引用同一个函数 - 使用常量值。

【讨论】:

  • 我认为没有任何改进。如果你想引用一个函数,命名它是完美的解决方案——当然名字不应该是任意的。
【解决方案2】:

是的。示例:

function main(a, b, c) {
    console.log(main.length);
}

main(1, 2);    

看到这个Fiddle

【讨论】:

    猜你喜欢
    • 2016-04-11
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 2022-11-06
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    相关资源
    最近更新 更多