3

在 JavaScript 中,可以通过 获取传递给函数的参数列表arguments,这是一个类似数组的对象:

>> function fun(a, b, c) { console.log(arguments) };  
undefined
>> fun(1, 2, 3);
[1, 2, 3]

有没有办法获得一个包含每个参数的正式名称的对象?
也就是说,如果调用上面的函数,他应该得到:

{a = 1, b = 2, c = 3}
4

5 回答 5

6

我不建议这样做,因为如果代码将被缩小并且函数参数将被压缩器/混淆器重命名,您可能会丢失一些数据。

于 2012-10-08T14:13:14.100 回答
4

toString对于某些浏览器,您可以根据函数的表示从定义的参数中解析参数名称,如本问题中所述。您可以使用它来自己映射值。

请注意,并非所有参数都必须命名,例如,如果我要在上面调用您的函数,fun(1, 2, 3, 4)最后一个参数不会映射到任何名称,但仍然可以通过arguments

于 2012-10-08T14:11:22.313 回答
2

那是不存在的。您可以将参数作为对象传递。

于 2012-10-08T14:09:32.830 回答
2

形式参数的名称在运行时不可用(编辑除了作为toString()函数值中文本的一部分,正如@David Hedlund 指出的那样),但参数值可通过arguments对象获得。如果您在函数中编写代码,那么您当然知道名称,因此您可以自己构建这样的对象:

function foo(a, b, c) {
  return {a: a, b: b, c: c};
}
于 2012-10-08T14:10:21.783 回答
1

有没有办法获得一个包含每个参数的正式名称的对象?

不。形式参数本质上与声明的变量相同。每个执行上下文都有一个关联的变量对象 (ed3) 或环境记录 (ed 5),声明的变量和形式参数是其属性。

您无法访问该对象,因此您无法检查它以查看它具有哪些属性。

在全局执行上下文中,变量是全局对象的属性,但不是在函数执行上下文中。并且没有正式的方法来区分变量和全局对象的其他属性。

于 2012-10-08T14:19:00.343 回答