web-dev-qa-db-ja.com

キャッチされていないSyntaxError:ストリクトモードコードでは、関数はトップレベルでのみ、または別の関数内ですぐに宣言できます

こんにちは、このプロジェクトを開発者モード(gruntサーバー)で実行すると https://github.com/kennethlynne/generator-angular-xl すべて正常ですが、プロダクションモード(gruntビルド)で実行すると私は `

キャッチされていないSyntaxError:ストリクトモードコードでは、関数はトップレベルまたは別の関数内でのみ宣言できます

誰が何が起こっているのか知っていますか?おかげで、

Ps。 JSは多くのファイルに分割されているため、コードではなくプロジェクトへのリンクを投稿しました。

17
Stefanos Chrs

私が問題を解決した方法は、'use strict'それは、最終的な縮小スクリプトのjqueryの上にありました。別の方法は、厳密なバグなしでjQueryのバージョンを1に変更することです。

編集:結局のところ、それはバージョン1.11でのjQueryの縮小エラーでした。これを簡単に修正するには、Gruntファイルに移動して行をコメント化します

banner: "'use strict';\n"
6
Stefanos Chrs

これは、エラーメッセージの内容です。

関数は、最上位または別の関数内でのみ宣言できます

必須ではありません ifステートメントやforループなど、他のブロック内に関数宣言を配置します。

例:

'use strict';

function some() {

    function okay() {
    }

    let x = 1;

    function no_problem() {
    }

    if (x == 1) {

        function BOOM() {   // <- wrong!
        }
    }
}
19
Bergi

上記の誰かが提案したように、'use strict';部分のコメントを外すか、関数構文を変更することもできます

の代わりに

function funcName (param) { }

使用する

funcName = function(param) {}; 
7
Loay

正しい答えに加えて、これは特定のシナリオでのFireFoxのバグである可能性もあります

1人のユーザーのマシンでこのエラーメッセージが表示されました。 JavaScriptファイルにはuse strict linebelowこのエラーをスローしたメソッド(これによる影響はありません)

それはたまたまFireFoxバージョン45.9.0(そしておそらく古いバージョンも)の問題でした。 Firefoxを最新バージョン(現在は52.4)に更新すると、問題が解決しました。

1
Ole Albers