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

JS类方法中arguments无法同步修改参数值的问题咨询

类方法中修改arguments无法同步参数的原因及解决办法

先看你给出的代码和实际输出:

代码:

class ExampleClass {
  someMethod(x) {
    arguments[0] = 100;
    console.log(arguments[0]);
    return x;
  }
}
let example = new ExampleClass();
console.log([example.someMethod("5")]);

function someFunction(x) {
  arguments[0] = 100;
  console.log(arguments[0]);
  return x;
}
console.log([someFunction("5")]);

实际输出:

100
["5"]
100
[100]

原因分析

核心区别在于类的方法默认运行在严格模式下——不管全局代码是否开启严格模式,类内部的所有方法都会自动启用严格模式。

在非严格模式的普通函数中,arguments对象和函数参数是绑定的:修改arguments[0]会同步修改对应的参数x,反过来修改x也会影响arguments[0]。但严格模式下取消了这种绑定关系:arguments对象只是参数的一个副本,修改arguments不会影响原参数,修改参数也不会改变arguments。

解决办法

如果你需要在类方法中实现类似普通非严格函数的效果,可以用以下几种方式:

1. 直接修改参数变量

放弃操作arguments,直接修改参数x:

class ExampleClass {
  someMethod(x) {
    x = 100;
    console.log(x);
    return x;
  }
}
let example = new ExampleClass();
console.log([example.someMethod("5")]);
// 输出:100  [100]

2. 返回arguments中的值

如果必须操作arguments,可以直接返回arguments[0]而不是原参数:

class ExampleClass {
  someMethod(x) {
    arguments[0] = 100;
    console.log(arguments[0]);
    return arguments[0];
  }
}
let example = new ExampleClass();
console.log([example.someMethod("5")]);
// 输出:100  [100]

3. 使用Rest参数替代arguments

Rest参数是更现代的写法,行为更直观,且在严格模式下也能直接修改:

class ExampleClass {
  someMethod(...args) {
    args[0] = 100;
    console.log(args[0]);
    return args[0];
  }
}
let example = new ExampleClass();
console.log([example.someMethod("5")]);
// 输出:100  [100]

总结

类方法默认处于严格模式,arguments与参数无绑定关系,因此修改arguments不会同步到参数。通过直接操作参数、返回arguments值或使用Rest参数,都能达到你预期的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 12:33:19