在 JavaScript 中,可以通过 获取传递给函数的参数列表arguments
,这是一个类似数组的对象:
>> function fun(a, b, c) { console.log(arguments) };
undefined
>> fun(1, 2, 3);
[1, 2, 3]
有没有办法获得一个包含每个参数的正式名称的对象?
也就是说,如果调用上面的函数,他应该得到:
{a = 1, b = 2, c = 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}
我不建议这样做,因为如果代码将被缩小并且函数参数将被压缩器/混淆器重命名,您可能会丢失一些数据。
toString
对于某些浏览器,您可以根据函数的表示从定义的参数中解析参数名称,如本问题中所述。您可以使用它来自己映射值。
请注意,并非所有参数都必须命名,例如,如果我要在上面调用您的函数,fun(1, 2, 3, 4)
最后一个参数不会映射到任何名称,但仍然可以通过arguments
那是不存在的。您可以将参数作为对象传递。
形式参数的名称在运行时不可用(编辑除了作为toString()
函数值中文本的一部分,正如@David Hedlund 指出的那样),但参数值可通过arguments
对象获得。如果您在函数中编写代码,那么您当然知道名称,因此您可以自己构建这样的对象:
function foo(a, b, c) {
return {a: a, b: b, c: c};
}
有没有办法获得一个包含每个参数的正式名称的对象?
不。形式参数本质上与声明的变量相同。每个执行上下文都有一个关联的变量对象 (ed3) 或环境记录 (ed 5),声明的变量和形式参数是其属性。
您无法访问该对象,因此您无法检查它以查看它具有哪些属性。
在全局执行上下文中,变量是全局对象的属性,但不是在函数执行上下文中。并且没有正式的方法来区分变量和全局对象的其他属性。