JavaScript 开发 - 获取函数名称、获取函数参数数量、获取函数参数名称

一、获取函数名称

  1. 通过 name 属性获取函数名称
js 复制代码
function receiver(fn) {
    console.log(fn.name);                
}

console.log("----- 箭头函数 -----");


const test1 = () => {};

console.log(test1.name);
receiver(test1);

console.log("----- 普通函数 -----");

function test2() {}

console.log(test2.name);
receiver(test2);

const test3 = function test_3() {};

console.log(test3.name);
receiver(test3);

console.log("----- 匿名函数 -----");

const test4 = function () {};

console.log(test4.name);
receiver(test4);
复制代码
# 输出结果

----- 箭头函数 -----
test1
test1
----- 普通函数 -----
test2
test2
test_3
test_3
----- 匿名函数 -----
test4
test4
js 复制代码
function receiver(fn) {
    console.log(fn.name);                
    console.log(fn.name === "");
}

receiver(() => {});
复制代码
# 输出结果


true
  1. name 属性是只读的,不能用赋值运算符修改
js 复制代码
function test() {
    console.log("execute test");
}

console.log(test.name);
test();

test.name = "test123"
console.log(test.name);
test();
复制代码
# 输出结果

test
execute test
test
execute test

二、获取函数参数数量

js 复制代码
function func1() {}

console.log(func1.length);

function func2(a, b) {}

console.log(func2.length);

function fun3(name, age = 18, ...rest) {}

console.log(fun3.length);
复制代码
# 输出结果

0
2
1

三、获取函数参数名称

js 复制代码
function test1(a, b, c) {
    console.log(a, b, c);
}

console.log(test1.toString());

const test2 = (x, y, z) => {};

console.log(test2.toString());

function test3(name, age = 18, ...rest) {}

console.log(test3.toString());
复制代码
function test1(a, b, c) {
				console.log(a, b, c);
			}
function param name.html:19 (x, y, z) => {}
function param name.html:23 function test3(name, age = 18, ...rest) {}
js 复制代码
function getParamNames(fn) {
    const fnStr = fn.toString();

    // 匹配参数部分(支持箭头函数和普通函数)
    const paramMatch = fnStr.match(/\(([^)]*)\)/);
    if (!paramMatch) return [];

    // 分割参数并清理空格
    const result = paramMatch[1]
        .split(",")
        .map((param) => param.trim())
        .filter((param) => param);

    for (let i = 0; i < result.length; i++) {
        const param = result[i];
        if (param.includes("=")) {
            result[i] = param.split("=")[0].trim();
            continue;
        }
        if (param.startsWith("...")) {
            result[i] = param.slice(3).trim();
            continue;
        }
    }

    return result;
}

function test1(a, b, c) {
    console.log(a, b, c);
}

console.log(getParamNames(test1));

const test2 = (x, y, z) => {};

console.log(getParamNames(test2));

function test3(name, age = 18, ...rest) {}

console.log(getParamNames(test3));
复制代码
# 输出结果

(3) ['a', 'b', 'c']
(3) ['x', 'y', 'z']
(3) ['name', 'age', 'rest']
相关推荐
To_OC5 小时前
LC 207 课程表:刚学图论那会儿,我连这是拓扑排序都没看出来
javascript·算法·leetcode
To_OC5 小时前
LC 208 实现 Trie 前缀树:曾被名字劝退,写完发现是送分题
javascript·算法·leetcode
天渺工作室5 小时前
实现一个adblock/adblock plus等浏览器广告拦截器检测插件
前端·javascript
阳光是sunny6 小时前
Vue 项目怎么做用户行为全链路监控?轻量插件方案详解
前端·面试·架构
ZhengEnCi6 小时前
Q04-Vite禁用CSS代码分割-解决生产环境样式加载顺序混乱问题
前端·vue.js·vite
九酒6 小时前
AI Agent 开发踩坑记:口播功能非得用 APP 原生实现吗?
前端·人工智能·agent
Jackson__7 小时前
做了一段时间的AI coding后,我终于搞清了 CLI 和 MCP 的区别
前端·agent·ai编程
IT_陈寒10 小时前
JavaScript项目实战经验分享
前端·人工智能·后端
用户479492835691510 小时前
6w star,GitHub 趋势第一的 Ponytail,这个agent插件到底在火什么
前端·后端
薛定喵的谔12 小时前
我开源了一个精致的 Next.js 博客模板:Skyplume
前端·前端框架·next.js