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_OC42 分钟前
写了 5 个表单 Demo 后,我终于彻底搞懂了 React 受控与非受控组件
前端·react.js·前端框架
Sterting1 小时前
第9课 Vue Router 路由
前端·vue.js
用户059540174461 小时前
LangChain Memory 测试踩坑实录:用 pytest 自动化回归对话记忆,我折腾了整整一个周末
前端·css
coder!mq1 小时前
说几个常见的语法糖?
java·开发语言·算法
gugucoding1 小时前
38. 【Java】Stream API(下):高级操作与性能
java·开发语言
kyriewen1 小时前
Claude Code后天起默认Auto模式了——我第一时间改了这6个设置
前端·ai编程·claude
Lhan.zzZ1 小时前
在 Visual Studio 2022 中打造可扩展的动态链接库模块:从零搭建到原理解析
开发语言·c++·visual studio
心平气和量大福大2 小时前
android-实例-蒲公英-更新与安装-5-签名与生成APK
android·java·开发语言
码哥DFS2 小时前
构造函数、实例对象、对象原型 ----三者关系
开发语言·javascript·原型模式