语法错误:参数在字段中无效
当 arguments
标识符在类字段初始化器或静态初始化块中读取时,就会出现 JavaScript 异常 "SyntaxError: arguments is not valid in fields",该标识符位于非 箭头函数 之外。
信息
SyntaxError: 'arguments' is not allowed in class field initializer or static initialization block (V8-based) SyntaxError: arguments is not valid in fields (Firefox) SyntaxError: Unexpected identifier 'arguments'. Cannot reference 'arguments' in class field initializer. (Safari)
错误类型
出了什么问题?
类字段初始化器表达式或类静态初始化块在其作用域中没有 arguments
。尝试访问它会导致语法错误。
- 即使
arguments
在父作用域中绑定(例如,当类嵌套在非箭头函数中时),情况也是如此。 - 在此作用域内声明的非箭头函数仍然会绑定自己的
arguments
并正常读取它。
示例
js
function makeOne() {
class C {
args = { ...arguments }; // SyntaxError: arguments is not valid in fields
}
return new C();
}
js
let CArgs;
class C {
static {
CArgs = arguments; // SyntaxError: arguments is not valid in fields
}
}
js
class C {
args = {};
constructor() {
this.args = arguments; // You can use arguments in constructors
}
myMethod() {
this.args = arguments; // You can also use it in methods
}
}
js
function makeOne() {
const _arguments = arguments;
class C {
args = { ..._arguments }; // Only the identifier is forbidden
}
return new C();
}