You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript:如何从函数指针及外层箭头函数中获取函数名与参数名

JavaScript函数指针的名称与参数信息获取

一、从函数指针获取自身的名称及参数信息

1. 获取函数名称

JavaScript中可直接通过函数的name属性获取名称,不同场景表现如下:

  • 具名函数:返回定义时的名称
    function add(a, b) {}
    console.log(add.name); // 输出: "add"
    
  • 匿名函数赋值给变量:ES6+会自动推断变量名作为函数名称
    const multiply = function() {};
    console.log(multiply.name); // 输出: "multiply"
    
  • 箭头函数:返回其被赋值的变量名(直接赋值场景)
    const divide = () => {};
    console.log(divide.name); // 输出: "divide"
    

2. 获取函数参数信息

通过Function.prototype.toString()将函数转为字符串,再用正则解析参数部分:

  • 普通函数解析示例:
    function calculate(a, b, c) {}
    const funcStr = calculate.toString();
    const paramMatch = funcStr.match(/function\s*\w*\s*\((.*?)\)/);
    if (paramMatch) {
      const params = paramMatch[1].split(',').map(p => p.trim()).filter(Boolean);
      console.log(params); // 输出: ["a", "b", "c"]
    }
    
  • 箭头函数解析示例(兼容单参数无括号场景):
    const double = num => num * 2;
    const funcStr = double.toString();
    let params = [];
    if (!funcStr.startsWith('(')) {
      const paramMatch = funcStr.match(/^(\w+)\s*=>/);
      if (paramMatch) params = [paramMatch[1]];
    } else {
      const paramMatch = funcStr.match(/\((.*?)\)\s*=>/);
      if (paramMatch) {
        params = paramMatch[1].split(',').map(p => p.trim()).filter(Boolean);
      }
    }
    console.log(params); // 输出: ["num"]
    

二、解析箭头函数内部调用的函数及参数(不调用外层函数)

针对示例代码:

var func = data => foo(arg1, data)

不调用func的情况下,可通过解析函数字符串获取内部的foo和arg1:

const funcStr = func.toString();
// 匹配内部函数调用的结构,捕获函数名与参数列表
const callMatch = funcStr.match(/(\w+)\((.*?)\)/);
if (callMatch) {
  const innerFuncName = callMatch[1];
  const innerParams = callMatch[2].split(',').map(p => p.trim()).filter(Boolean);
  console.log('内部函数名:', innerFuncName); // 输出: "foo"
  console.log('目标参数:', innerParams[0]); // 输出: "arg1"
}

注意事项

这种字符串解析方式依赖代码格式,若函数内部有复杂嵌套、换行或特殊字符,正则需针对性调整,但对示例中的简单场景完全适用。

内容的提问来源于stack exchange,提问作者Jac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 14:13:12