语法错误:带有非简单参数的函数不允许使用“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)
错误类型
出了什么问题?
示例
函数语句
在这种情况下,函数 sum
具有默认参数 a=1
和 b=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);
};
})();