语法错误:带有非简单参数的函数不允许使用“use strict”

当在具有 默认参数rest 参数解构参数 的函数顶部使用 "use strict" 指令时,会出现 JavaScript 异常 ""use strict" not allowed in function"。

消息

SyntaxError: Illegal 'use strict' directive in function with non-simple parameter list (V8-based)
SyntaxError: "use strict" not allowed in function with default parameter (Firefox)
SyntaxError: "use strict" not allowed in function with rest parameter (Firefox)
SyntaxError: "use strict" not allowed in function with destructuring parameter (Firefox)
SyntaxError: 'use strict' directive not allowed inside a function with a non-simple parameter list. (Safari)

错误类型

出了什么问题?

在具有以下参数之一的函数顶部写入 "use strict" 指令

根据 ECMAScript 规范,在这些函数顶部不允许使用 "use strict" 指令。

示例

函数语句

在这种情况下,函数 sum 具有默认参数 a=1b=2

js
function sum(a = 1, b = 2) {
  // SyntaxError: "use strict" not allowed in function with default parameter
  "use strict";
  return a + b;
}

如果函数应该处于 严格模式,并且整个脚本或包含函数也允许处于严格模式,则可以将 "use strict" 指令移到函数外部

js
"use strict";
function sum(a = 1, b = 2) {
  return a + b;
}

函数表达式

函数表达式可以使用另一种解决方法

js
const sum = function sum([a, b]) {
  // SyntaxError: "use strict" not allowed in function with destructuring parameter
  "use strict";
  return a + b;
};

这可以转换为以下表达式

js
const sum = (function () {
  "use strict";
  return function sum([a, b]) {
    return a + b;
  };
})();

箭头函数

如果箭头函数需要访问 this 变量,则可以使用箭头函数作为包含函数

js
const callback = (...args) => {
  // SyntaxError: "use strict" not allowed in function with rest parameter
  "use strict";
  return this.run(args);
};

这可以转换为以下表达式

js
const callback = (() => {
  "use strict";
  return (...args) => {
    return this.run(args);
  };
})();

另请参阅