一、获取函数名称
- 通过 name 属性获取函数名称
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
function receiver(fn) {
console.log(fn.name);
console.log(fn.name === "");
}
receiver(() => {});
# 输出结果
true
- name 属性是只读的,不能用赋值运算符修改
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
二、获取函数参数数量
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
三、获取函数参数名称
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) {}
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']