--- title: 'SyntaxError: "use strict" not allowed in function with non-simple parameters' slug: Web/JavaScript/Reference/Errors/Strict_Non_Simple_Params tags: - Errors - JavaScript - TypeError translation_of: Web/JavaScript/Reference/Errors/Strict_Non_Simple_Params ---
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
{{jsxref("SyntaxError")}}。
次の引数のうちいずれかを持つ関数の先頭に "use strict"
ディレクティブが書かれています:
ECMAScript 仕様に則って、このような関数の先頭では "use strict"
を使用できません。
このケースでは、関数 sum
は既定値を持つ引数 a=1
と b=2
を持っています:
function sum(a=1, b=2) { // SyntaxError: "use strict" not allowed in function with default parameter "use strict"; return a + b; }
関数を strict モードにしたい、かつスクリプト全体、またはエンクロージャー関数が strict モードになってもよいなら、"use strict"
ディレクティブを関数の外側に移動できます:
"use strict"; function sum(a=1, b=2) { return a + b; }
function 式では、別の回避策をとることができます:
var sum = function sum([a, b]) { // SyntaxError: "use strict" not allowed in function with destructuring parameter "use strict"; return a + b; };
これは、次の式に変換できます:
var sum = (function() { "use strict"; return function sum([a, b]) { return a + b; }; })();
アロー関数が this
変数にアクセスする必要がある場合、アロー関数をエンクロージャー関数として使用できます:
var callback = (...args) => { // SyntaxError: "use strict" not allowed in function with rest parameter "use strict"; return this.run(args); };
これは、次の式に変換できます:
var callback = (() => { "use strict"; return (...args) => { return this.run(args); }; })();