我有一个 JavaScript 函数,它接受一个函数作为参数,如下所示:
var myFunction = function(funParameter) {
// funParameter is a function
};
我可以这样调用这个函数:
myFunction(function (aParameter, anotherOne) {
// do stuff
});
在 myFunction
的主体中,如何检索 funParameter
应该接收的参数?我想知道传递给 myFunction
的函数声明的参数(在上面的例子中,我想知道参数函数接受 aParameter
和 anotherOne
.
我知道这样做的唯一方法是适本地解析 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/