SyntaxError: 'arguments'/'eval' can't be defined or assigned to in strict mode code

JavaScript 严格模式下特有的异常“在严格模式代码中不能定义或赋值给‘arguments’”或“在严格模式代码中不能定义或赋值给‘eval’”发生在尝试创建名为 argumentseval绑定,或对这些名称进行赋值时。

消息

SyntaxError: Unexpected eval or arguments in strict mode (V8-based)
SyntaxError: 'arguments' can't be defined or assigned to in strict mode code (Firefox)
SyntaxError: Cannot modify 'arguments' in strict mode. (Safari)
SyntaxError: Cannot destructure to a parameter name 'arguments' in strict mode. (Safari)
SyntaxError: Cannot declare a variable named arguments in strict mode. (Safari)
SyntaxError: Cannot declare a catch variable named 'arguments' in strict mode. (Safari)
SyntaxError: 'arguments' is not a valid function name in strict mode. (Safari)

错误类型

SyntaxError

哪里出错了?

在严格模式下,名称 argumentseval 的行为如同它们是保留字:你不能让它们指向函数中的 arguments 对象或全局的 eval 函数以外的任何东西。

示例

无效案例

js
"use strict";

const arguments = [1, 2, 3];
console.log(Math.max(...arguments));

function foo(...arguments) {
  console.log(arguments);
}

有效情况

js
"use strict";

const args = [1, 2, 3];
console.log(Math.max(...args));

function foo(...args) {
  console.log(args);
}

另见