我知道我可以像这样调用它而获得函数的String表示形式

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


从理论上讲,我可以解析生成的String来提取变量名。有任何编写该代码的使用者吗?有更容易的方法吗? (我不必担心缩小)

最佳答案

尝试使用以下代码:

  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 []

08-27 12:06