name属性是函数创建时自动设置的只读名称字符串,用于识别调试;length属性是函数定义时显式声明的无默认值形参数量,两者均与运行时无关且不可赋值。

name 属性表示函数的名称,length 属性表示函数定义时声明的形参数量。
name 属性:函数的“身份证”名字
它是一个只读字符串,在函数创建时自动设置,主要用于识别和调试。
- 函数声明:
function sayHello() {}→sayHello.name是"sayHello" - 具名函数表达式:
const fn = function greet() {}→fn.name是"greet" - 匿名函数表达式或箭头函数:
const fn = function() {}或const fn = () => {}→fn.name是空字符串"" - 对象方法简写:
obj = { init() {} }→obj.init.name是"init" - 使用
bind创建的函数:fn.bind(obj).name是"bound fn"
length 属性:函数“期待几个参数”
它反映的是函数定义中**显式列出的、无默认值的形参个数**,不随调用时传入多少实参而变化。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 普通函数:
function add(a, b) {}→add.length是2 - 含默认参数:
function calc(x, y = 10, z = 20) {}→calc.length是1(只算x) - 带剩余参数:
function sum(first, ...rest) {}→sum.length是1(只算first) - 无参数函数:
function noop() {}→noop.length是0
注意两个属性的常见误区
它们都只跟函数定义方式有关,和运行时行为无关:
立即学习“Java免费学习笔记(深入)”;
-
name不是“当前正在执行的函数名”,无法在任意函数体内直接靠this.name或arguments.callee.name安全获取(后者已废弃,且箭头函数无arguments) -
length不等于arguments.length—— 后者是调用时实际传入的实参数量,前者是定义时“期望”的形参数量 - 两者均为只读属性,赋值无效,也不会报错

















