获取JavaScript函数对象的参数数量(甚至名称)

16

我希望在接受回调函数之前对其进行评估。这意味着我至少需要知道已接受参数的数量-如果数量不匹配,我将在控制台中留下警告。 但是我无法找出,JavaScript函数对象是否具有可帮助我获取该信息的属性。
那么,能否在不解析函数字符串的情况下实现这一点(这样做不值得)?

1个回答

31

一个函数拥有一个length属性,它会告诉你函数接收的命名参数的数量。注意,即使函数不给这些变量命名,它仍然可以使用arguments变量来访问这些变量;length并不考虑这一点(也没有替代的方法)。

function foo(a, b) {
    for (var i=0;i<arguments.length;i++) {
        console.log(arguments[i]);
    }
}

console.log(foo.length); // reports 2, even though `foo` can access all your arguments!

1
谢谢。是否有函数对象属性和方法的完整规范?我找不到。 - Tomáš Zato
@Tomas:我的回答中的链接应该可以提供这个。 - Matt
1
请注意:默认参数不计入 length。请自行检查: [((a) => {}), ((a=1) => {})].forEach(f => console.log(\f="${f.toString()}", length=${f.length}`))` - Domi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接