web-dev-qa-db-fra.com

SyntaxError non capturée: en code de mode strict, les fonctions ne peuvent être déclarées qu'au niveau supérieur ou immédiatement dans une autre fonction

Bonjour quand je lance ce projet en mode développeur (serveur grunt) https://github.com/kennethlynne/generator-angular-xl tout va bien mais quand je le lance en mode production (build grunt) Je reçois un `

SyntaxError non capturée: en code de mode strict, les fonctions ne peuvent être déclarées qu'au niveau supérieur ou immédiatement dans une autre fonction

Quelqu'un a une idée de ce qui se passe? Merci,

Ps. J'ai posté un lien vers le projet au lieu du code car le JS est divisé en plusieurs fichiers.

17
Stefanos Chrs

J'ai résolu le problème en supprimant le 'use strict' qui était au-dessus du jquery dans le script minifié final. Une autre façon peut être de changer la version de jQuery en une seule sans le bug strict

EDIT: Après tout, c'était une erreur de minification jQuery sur la version 1.11, et une solution facile pour cela est d'aller dans votre fichier Grunt et de commenter la ligne

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

C'est exactement ce que dit le message d'erreur:

les fonctions ne peuvent être déclarées qu'au niveau supérieur ou immédiatement dans une autre fonction

Vous ne devez pas mettre une déclaration de fonction à l'intérieur de tout autre bloc, comme une instruction if ou for-loop.

Exemple:

'use strict';

function some() {

    function okay() {
    }

    let x = 1;

    function no_problem() {
    }

    if (x == 1) {

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

Comme quelqu'un l'a suggéré ci-dessus, vous pouvez décommenter le 'use strict'; partie, ou mieux encore, changez la syntaxe de votre fonction

au lieu de

function funcName (param) { }

utilisation

funcName = function(param) {}; 
7
Loay

En plus des bonnes réponses, cela pourrait être également un bogue dans FireFox dans certains scénarios spécifiques.

Nous avons eu ce message d'erreur sur la machine d'un seul utilisateur. Dans le fichier JavaScript, il y avait un use strict ligne ci-dessous la méthode qui a généré cette erreur (qui ne devrait pas être affectée par cela)

Il se trouve que c'était un problème avec la version 45.9.0 de FireFox (et peut-être aussi avec les anciennes versions). La mise à jour de Firefox vers la version la plus récente (actuellement 52.4) a résolu le problème.

1
Ole Albers