Solution
Mettez simplement un point-virgule ( ;) après console.log(… ).
Explication
L'erreur est facilement reproductible comme ceci:
console.log()
(function(){})
Il essaie de passer function(){}comme argument à la valeur de retourconsole.log() dont elle-même n'est pas une fonction mais en fait undefined(vérifier typeof console.log();). C'est parce que JavaScript interprète cela comme console.log()(function(){}). estconsole.log cependant une fonction.
Si vous n'aviez pas l' consoleobjet que vous verriez
ReferenceError: la console n'est pas définie
Si vous aviez l' consoleobjet mais pas la logméthode que vous verriez
TypeError: console.log n'est pas une fonction
Ce que vous avez, cependant, c'est
TypeError: console.log (...) n'est pas une fonction
Notez (...)après le nom de la fonction. Avec ceux-ci, il fait référence à la valeur de retour de la fonction.
Le saut de ligne ne sépare pas ces deux expressions comme des instructions distinctes en raison des règles de JavaScript pour l'insertion automatique de points-virgules (ASI) .
Respectez le ;
Tous ces extraits de code entraînent toutes sortes d'erreurs inattendues si aucun point-virgule n'est présent:
console.log() // As covered before
() // TypeError: console.log(...) is not a function
console.log() // Accessing property 0 of property 1 of the return value…
[1][0] // TypeError: console.log(...) is undefined
console.log() // Like undefined-3
-3 // NaN
let a, b;
const array = Array.from({ length: 2 })
// Now, let’s use destructuring:
[a, b] = array; // ReferenceError: can't access lexical declaration 'array' before initialization
let a, b;
const array = Array.from({ length: 2 }).fill(1),
array2 = Array.from({ length: 2 })
// Now, let’s use destructuring. Attempt to get the two 1’s from `array` as `a` and `b`:
[a, b] = array;
console.log(a, b); // undefined undefined
Un autre exemple
Vous voyez (...)souvent l'utilisation de méthodes chaînées ou d'accesseurs de propriété chaînés:
string.match(/someRegEx/)[0]
Si ce RegEx n'est pas trouvé, la méthode retournera nullet l'accesseur de propriété sur nullprovoquera un TypeError: string.match(...) is null - la valeur de retour est null. Dans le cas de console.log(...)la valeur de retour était undefined.