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']
相关推荐
白晨并不是很能熬夜2 小时前
【PRC】第 2 篇:Netty 通信层 — NIO 模型 + 自定义协议 + 心跳
java·开发语言·后端·面试·rpc·php·nio
简简单单就是我_hehe2 小时前
后端链路追踪局部采集和全量采集配置说明
java·开发语言
北京理工大学软件工程2 小时前
C#111
开发语言·c#
IT_陈寒2 小时前
JavaScript里这个隐式类型转换的坑,我终于爬出来了
前端·人工智能·后端
方呵呵3 小时前
一个 3.5k Star Vue H5 项目的二次进化:我把它重构成了 Monorepo 工程体系
前端
_风满楼3 小时前
HTTP 请求的五种传参方式
前端·javascript·后端
叶子野格3 小时前
《C语言学习:指针》12
c语言·开发语言·c++·学习·visual studio
木斯佳3 小时前
前端八股文面经大全:字节暑期前端一面(2026-04-22)·面经深度解析
前端
光影少年3 小时前
前端线上屏幕出现卡顿如何排查?
开发语言·前端·javascript·学习·前端框架·node.js