函数表达式无内置this或arguments绑定,但可通过arguments.callee(仅非严格模式且非箭头函数)获取自身引用,用于递归等场景。

函数表达式本身没有内置的 this 或 arguments 绑定(尤其在箭头函数中),但它可以通过几种明确方式获取当前执行上下文,关键在于区分“函数对象自身”和“调用时的执行环境”。
使用 arguments.callee(非严格模式下)
在传统普通函数表达式中,arguments.callee 指向正在执行的函数本身,可用于递归或动态引用当前函数:
- 仅在非严格模式下可用;严格模式下访问会抛出
TypeError - 不能用于箭头函数(箭头函数没有
arguments) - 示例:
const factorial = function(n) { return n
显式传递函数引用(推荐且安全)
避免依赖 arguments.callee,更清晰的做法是将函数名绑定为变量或使用具名函数表达式:
- 具名函数表达式:函数名仅在内部可见,可用于递归和调试
- 示例:
const factorial = function fact(n) { return n - 变量自引用(适用于简单场景):
let handler = function() { handler = null; /* 处理逻辑 */ };
通过 this 和 new.target 获取调用上下文
函数表达式执行时的 this 值取决于调用方式,不是函数定义决定的:
- 独立调用(非方法、非构造、非箭头):非严格模式下
this是全局对象,严格模式下为undefined - 作为对象方法调用:
this指向该对象 - 用
call/apply/bind显式绑定:this即指定值 -
new.target可判断是否被new调用(仅普通函数,箭头函数无)
箭头函数:继承外层执行上下文
箭头函数不创建自己的 this、arguments、super 或 new.target,而是从词法外层捕获:
- 其
this始终等于定义时所在作用域的this - 没有
arguments,需用剩余参数...args替代 - 无法用作构造函数(调用
new会报错) - 适合回调场景,避免
this绑定问题

















