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']
相关推荐
Highcharts.js39 分钟前
倒置百分比堆叠面积图表示列详解|Highcharts大气成分图表代码
开发语言·信息可视化·highcharts·图表开发·面积图·图表示例·推叠图
2601_958492551 小时前
Optimizing Engagement with Freehead Skate - HTML5 Game - Construct 3
前端·html·html5
csdn_aspnet1 小时前
C语言 Lomuto分区算法(Lomuto Partition Algorithm)
c语言·开发语言·算法
晨曦中的暮雨1 小时前
4.15腾讯 CSIG云服务产线 一面
java·开发语言
存在morning1 小时前
【GO语言开发实践】二 GO 并发快速上手
大数据·开发语言·golang
茉莉玫瑰花茶1 小时前
工作流的常见模式 [ 1 ]
java·服务器·前端
zhangxingchao2 小时前
AI应用开发六:企业知识库
前端·人工智能·后端
山峰哥2 小时前
SQL慢查询调优实战:从全表扫描到索引覆盖的完整复盘
前端·数据库·sql·性能优化
xiaoerbuyu12332 小时前
开源Java 邮箱 基于SpringBoot+Vue前后端分离的电子邮件
java·开发语言