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
相关产品推荐
相关产品推荐

