You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

未声明'use strict'的带默认参数函数访问arguments.callee报错原因

问题原因分析
  • 该行为是ES2015(ES6)规范明确定义的默认规则,和是否手动声明'use strict'没有直接关联。
  • 当函数使用了以下任意一种非简约参数语法时,函数内部会自动应用严格模式下对arguments对象的限制:
    • 默认参数值(即你代码中用到的a = 50写法)
    • 剩余参数(比如function foo(...args) {}的写法)
    • 参数解构(比如function foo({a, b}) {}的写法)
  • 这类限制包含两条核心规则:
    1. 禁止访问arguments.callee、arguments.caller属性,访问时会直接抛出TypeError
    2. arguments对象不再和对应形参做动态绑定,修改形参不会同步更新arguments中的值

验证示例

你可以将函数参数修改为无默认值的普通写法,即可正常访问arguments.callee:

function foo(a, b) {
  console.log(arguments.callee);
}

foo(10, 50); // 正常打印foo函数本身

内容的提问来源于stack exchange,提问作者coderboy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 08:45:03