获取函数参数名称而不调用函数?

时间:2015-08-20 01:39:42

标签: javascript function parameters

我知道我可以在不调用它的情况下获取函数的String表示

function storeData(id, data) { console.log("Doing stuff..") };
storeData.toString(); //"function storeData(id, data) { console.log("Doing stuff..") }"

理论上,我可以解析生成的String以获取变量名称。写这些代码的任何人?有没有更简单的方法? (我不需要担心缩小)

1 个答案:

答案 0 :(得分:3)

尝试使用以下代码:

  var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
  var ARGUMENT_NAMES = /([^\s,]+)/g;
  function getParamNames(func) {
      var fnStr = func.toString().replace(STRIP_COMMENTS, '');
      var result = fnStr.slice(fnStr.indexOf('(') + 1, fnStr.indexOf(')')).match(ARGUMENT_NAMES);
      if (result === null)
          result = [];
      return result;
  }

  getParamNames(getParamNames) // returns ['func']
  getParamNames(function (a, b, c, d) { }) // returns ['a','b','c','d']
  getParamNames(function (a,/*b,c,*/d) { }) // returns ['a','d']
  getParamNames(function () { }) // returns []