Lösung
Setzen Sie einfach ein Semikolon ( ;) nach console.log(… ).
Erläuterung
Der Fehler ist so leicht reproduzierbar:
console.log()
(function(){})
Es wird versucht, function(){}als Argument an den Rückgabewert zu übergeben, console.log()dessen Funktion selbst keine Funktion ist, sondern tatsächlich undefined(check typeof console.log();). Dies liegt daran, dass JavaScript dies als interpretiert console.log()(function(){}). console.logjedoch ist eine Funktion.
Wenn Sie das consoleObjekt nicht hätten , würden Sie sehen
ReferenceError: Konsole ist nicht definiert
Wenn Sie das consoleObjekt hätten, aber nicht die logMethode, die Sie sehen würden
TypeError: console.log ist keine Funktion
Was Sie jedoch haben, ist
TypeError: console.log (...) ist keine Funktion
Beachten Sie den (...)nach dem Funktionsnamen. Bei diesen bezieht es sich auf den Rückgabewert der Funktion.
Der Zeilenumbruch trennt diese beiden Ausdrücke aufgrund der JavaScript- Regeln für das automatische Einfügen von Semikolons (ASI) nicht als separate Anweisungen .
Respektiere die ;
Alle diese Codefragmente führen zu allen möglichen unerwarteten Fehlern, wenn keine Semikolons vorhanden sind:
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
Ein anderes Beispiel
Sie sehen dies häufig (...)bei Verwendung von verketteten Methoden oder verketteten Eigenschaftszugriffsberechtigten:
string.match(/someRegEx/)[0]
Wenn diese RegEx nicht gefunden wird, gibt die Methode zurück nullund der Eigenschaft-Accessor on nullverursacht a TypeError: string.match(...) is null - der Rückgabewert ist null. Im Fall von console.log(...)dem Rückgabewert war undefined.