参考了网上别人写的代码,大致是这样的:
function getArgNames(fn) {
if (typeof(fn)==='function') {
return fn.toString().match(/function\s*\w+\(\s*([^)]*)\)/)[1].replace(/\/\*.*?\*\/|\/\/[^\r\n]*(?:[\r\n]+|$)|\s+$/g,'').split(/\s*,\s*/);
}
}
主要思路是调用Function.prototype.toString()获取函数的定义字符串,然后提取其中的参数列表,去除其中的注释和多余的空白,最后将他们按逗号分隔到数组里。