function - 在 JavaScript 中检索函数参数的名称

标签 function javascript

我有一个 JavaScript 函数,它接受一个函数作为参数,如下所示:

var myFunction = function(funParameter) {
    // funParameter is a function
};

我可以这样调用这个函数:

myFunction(function (aParameter, anotherOne) {
    // do stuff
});

myFunction 的主体中,如何检索 funParameter 应该接收的参数?我想知道传递给 myFunction 的函数声明的参数(在上面的例子中,我想知道参数函数接受 aParameteranotherOne.

我知道这样做的唯一方法是适本地解析 funParameter.toString(),但我觉得这有点 hacky。

它应该像在 Mocha 测试中一样:

it('should test something synchronously', function () {...});
it('should test something asynchronously', function (done) {
    // test...
    done();
});

无论您传递给 it 的函数是否接受 done 参数,您都必须能够表现不同。

最佳答案

你要的是这个。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/length

除非保证参数名称在整个代码中是一致的并且永远不会以任何方式被篡改,否则你不想检查参数是否已命名,'done',大多数情况下,开发人员应该可以自由命名它们的函数参数。

此外,javascript 代码(用于浏览器)通常被丑化和破坏,并且参数名称被缩短。如果更改名称,将会破坏您的功能。

但是,您更愿意做的是决定函数指定了多少个参数,而这可以通过 Function.length 来完成。

然而,这也不是一个可靠的解决方案,因为您始终可以不指定任何内容而仍然使用 arguments 获取参数值。

在 JavaScript 中,假设某些东西会按我预期的方式工作通常是个坏主意。因为您永远不知道谁会用他们的代码做什么。

语言本身在很多方面都是动态的,在设计函数/API 之前您必须非常小心。

来自 MDN:

console.log( (function () {}).length );  /* 0 */
console.log( (function (a) {}).length ); /* 1 */
console.log( (function (a, b) {}).length ); /* 2 etc. */
console.log( (function (...args) {}).length ); /* 0, rest parameter is not counted */

关于function - 在 JavaScript 中检索函数参数的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18624306/

相关文章:

javascript - 简单的 jQuery 交替显示/隐藏 div

node.js - 如何杀死node.js中生成的进程

python - 为什么这不是无限递归?

javascript - 如何显示带有悬停效果标题的模态图像?

javascript - Bootstrap 3 - 展开和折叠表行

javascript - 不同类别的状态变化(不 react )

php - 无法使用函数将值插入数据库,并且即使值为空也总是插入并出现错误通知

function - 在函数外部声明数组会提高重复调用函数的性能吗?

bash - 为什么 bash 脚本中需要 "declare -f"和 "declare -a"?

javascript - 打包应用中的 Chrome 通知。 "chrome.notifications.create"