350 Stimmen

Wie man feststellt, ob eine JavaScript-Funktion definiert ist

Woran erkennt man, ob eine Funktion in JavaScript definiert ist?

Ich möchte etwas in der Art machen

function something_cool(text, callback) {
    alert(text);
    if( callback != null ) callback();
}

Aber es verschafft mir einen

Callback ist keine Funktion

Fehler, wenn Callback nicht definiert ist.

8voto

Quentin Engles Punkte 2590

Ich könnte es tun

try{
    callback();
}catch(e){};

Ich weiß, dass es eine akzeptierte Antwort gibt, aber niemand hat dies vorgeschlagen. Ich bin mir nicht sicher, ob dies die Beschreibung von idiomatisch erfüllt, aber es funktioniert für alle Fälle.

In neueren JavaScript-Engines wird ein finally kann stattdessen verwendet werden.

8voto

bdukes Punkte 144019

Versuchen Sie es:

if (typeof(callback) == 'function')

6voto

Russell Ormes Punkte 525

Neu in JavaScript Ich bin nicht sicher, ob das Verhalten geändert hat, aber die Lösung von Jason Bunting (vor 6 Jahren) gegeben wird nicht funktionieren, wenn possibleFunction nicht definiert ist.

function isFunction(possibleFunction) {
  return (typeof(possibleFunction) == typeof(Function));
}

Dies führt zu einer ReferenceError: possibleFunction is not defined Fehler, wenn die Maschine versucht, das Symbol possibleFunction aufzulösen (wie in den Kommentaren zu Jasons Antwort erwähnt)

Um dieses Verhalten zu vermeiden, können Sie nur den Namen der Funktion übergeben, die Sie auf ihre Existenz prüfen wollen. Also

var possibleFunction = possibleFunction || {};
if (!isFunction(possibleFunction)) return false;

Dadurch wird eine Variable entweder auf die zu prüfende Funktion oder auf das leere Objekt gesetzt, wenn es nicht definiert ist, wodurch die oben genannten Probleme vermieden werden.

5voto

typeof(callback) == "function"

4voto

Andrew Hedges Punkte 21406
if ('function' === typeof callback) ...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X