The JavaScript exception "
'use strict'
not allowed in function" occurs when a
"use strict"
directive is used at the top of a function with
默认参数
,
rest parameters
,或
destructuring parameters
.
Edge: Cannot apply strict mode on functions with non-simple parameter list Firefox: SyntaxError: "use strict" not allowed in function with default parameter SyntaxError: "use strict" not allowed in function with rest parameter SyntaxError: "use strict" not allowed in function with destructuring parameter Chrome: SyntaxError: Illegal 'use strict' directive in function with non-simple parameter list
A
"use strict"
directive is written at the top of a function that has one of the following parameters:
A
"use strict"
directive is not allowed at the top of such functions per the ECMAScript specification.
In this case, the function
sum
has default parameters
a=1
and
b=2
:
function sum(a = 1, b = 2) {
// SyntaxError: "use strict" not allowed in function with default parameter
'use strict';
return a + b;
}
If the function should be in
严格模式
, and the entire script or enclosing function is also okay to be in strict mode, you can move the
"use strict"
directive outside of the function:
'use strict';
function sum(a = 1, b = 2) {
return a + b;
}
A function expression can use yet another workaround:
var sum = function sum([a, b]) {
// SyntaxError: "use strict" not allowed in function with destructuring parameter
'use strict';
return a + b;
};
This can be converted to the following expression:
var sum = (function() {
'use strict';
return function sum([a, b]) {
return a + b;
};
})();
If an arrow function needs to access the
this
variable, you can use the arrow function as the enclosing function:
var callback = (...args) => {
// SyntaxError: "use strict" not allowed in function with rest parameter
'use strict';
return this.run(args);
};
This can be converted to the following expression:
var callback = (() => {
'use strict';
return (...args) => {
return this.run(args);
};
})();