Tout fonctionne bien lorsque j'ai écrit la logique js dans une fermeture sous la forme d'un seul fichier js, comme:
(function(win){
//main logic here
win.expose1 = ....
win.expose2 = ....
})(window)
mais quand j'essaye d'insérer une fonction alternative de journalisation avant cette fermeture dans le même fichier js,
window.Glog = function(msg){
console.log(msg)
}
// this was added before the main closure.
(function(win){
//the former closure that contains the main javascript logic;
})(window)
il se plaint qu'il y a une TypeError:
Uncaught TypeError: (intermediate value)(...) is not a function
Qu'ai-je fait de mal?
la source
if
déclaration dans uneuseEffect()
fonction React lorsque je continuais à recevoir cette erreur "... n'est pas une fonction".Pour simplifier les règles de point-virgule
Chaque ligne qui commence par un
(
,[
, `, ou tout opérateur (/, +, - sont les seuls valides), doit commencer par un point - virgule.Cela empêche un
monstruosité.
Remarque additionnelle
Pour mentionner ce qui va se passer: les parenthèses seront indexées, les parenthèses seront traitées comme des paramètres de fonction. Le backtick se transformerait en un modèle étiqueté , et l'expression régulière ou les entiers explicitement signés se transformeraient en opérateurs. Bien sûr, vous pouvez simplement ajouter un point-virgule à la fin de chaque ligne. Il est bon de garder à l'esprit que lorsque vous effectuez rapidement un prototypage et que vous supprimez vos points-virgules.
De plus, l'ajout de points-virgules à la fin de chaque ligne ne vous aidera pas avec ce qui suit, alors gardez à l'esprit des déclarations telles que
Le cas ci-dessus arrivera à retourner / continuer / break / ++ / -. Tout linter l'attrapera avec une erreur de code mort ou de syntaxe ++ / - (++ / - ne se produira jamais de manière réaliste).
Enfin, si vous souhaitez que la concaténation de fichiers fonctionne, assurez-vous que chaque fichier se termine par un point-virgule. Si vous utilisez un programme bundler (recommandé), il devrait le faire automatiquement.
la source
Cas d'erreur:
Production:
Correction: il vous manque un point-virgule (;) pour séparer les expressions
la source
Pour moi, c'était beaucoup plus simple, mais il m'a fallu un certain temps pour le comprendre. Nous avions essentiellement dans notre .jslib
Il s'avère que Unity (emscripten?) N'aime tout simplement pas cette syntaxe. Nous l'avons remplacé par une bonne vieille boucle for et il a cessé de se plaindre tout de suite. Je déteste vraiment qu'il ne montre pas la ligne dont il se plaint, mais de toute façon, trompez-moi deux fois, honte à moi.
la source
(
sur la ligne suivante. Je ne vois rien de tout cela dans votre cas. La question ne consiste pas seulement en son titre!J'ai rencontré ce problème lorsque j'ai créé une nouvelle classe ES2015 où le nom de la propriété était égal au nom de la méthode.
par exemple:
Veuillez noter que cette implémentation était dans NodeJS 6.10.
Pour contourner le problème (si vous ne souhaitez pas utiliser le nom de méthode ennuyeux 'setTest'), vous pouvez utiliser un préfixe pour vos propriétés 'privées' (comme
_test
).Ouvrez vos outils de développement dans jsfiddle .
la source
Sortie: TypeError: (valeur intermédiaire) (valeur intermédiaire) n'est pas une fonction * Comment réparer IT -> car il vous manque un point-virgule (;) pour séparer les expressions;
pourquoi cette erreur vient? Raison: règles spécifiques pour l'insertion automatique de points-virgules qui reçoivent les normes ES6
la source
Lorsque je crée une classe racine, dont j'ai défini les méthodes à l'aide des fonctions fléchées. Lors de l'héritage et de l'écrasement de la fonction d'origine, j'ai remarqué le même problème.
ceci est résolu en définissant la méthode de la classe parent sans fonctions fléchées
la source