Soluzione
Metti semplicemente un punto e virgola ( ;) dopo console.log(… ).
Spiegazione
L'errore è facilmente riproducibile in questo modo:
console.log()
(function(){})
Sta cercando di passare function(){}come argomento al valore restituito di console.log()cui non è una funzione ma in realtà undefined(controllo typeof console.log();). Questo perché JavaScript lo interpreta come console.log()(function(){}). console.logtuttavia è una funzione.
Se non avessi l' consoleoggetto vedresti
ReferenceError: console non definita
Se avessi l' consoleoggetto ma non il logmetodo che vedresti
TypeError: console.log non è una funzione
Quello che hai, tuttavia, è
TypeError: console.log (...) non è una funzione
Notare il (...)dopo il nome della funzione. Con quelli si riferisce al valore di ritorno della funzione.
L'interruzione di riga non separa queste due espressioni come istruzioni separate a causa delle regole di JavaScript per l'inserimento automatico del punto e virgola (ASI) .
Rispetta il ;
Tutti questi frammenti di codice generano tutti i tipi di errori imprevisti se non sono presenti punti e virgola:
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 altro esempio
Puoi vedere le (...)volte con l'uso di metodi concatenati o funzioni di accesso alle proprietà concatenate:
string.match(/someRegEx/)[0]
Se quella RegEx non viene trovata, il metodo verrà restituito nulle la funzione di accesso della proprietà attiva nullcauserà un TypeError: string.match(...) is null - il valore restituito è null. Nel caso del console.log(...)il valore di ritorno è stato undefined.