Come capire se una funzione JavaScript è definita



Answers

Tutte le risposte attuali usano una stringa letterale, che preferisco non avere nel mio codice se possibile - questo non lo fa (e fornisce un significato semantico prezioso, per l'avvio):

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

Personalmente, provo a ridurre il numero di stringhe nel mio codice ...

Inoltre, mentre sono consapevole del fatto che typeof è un operatore e non una funzione, c'è poco danno nell'usare la sintassi che lo fa apparire come quest'ultimo.

Question

Come si dice se una funzione in JavaScript è definita?

Voglio fare qualcosa di simile

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

Ma mi prende un

la callback non è una funzione

errore quando callback non è definito.




Se il callback() che stai chiamando non solo per una volta in una funzione, puoi inizializzare l'argomento per il riutilizzo:

callback = (typeof callback === "function") ? callback : function(){};

Per esempio:

function something_cool(text, callback) {
    // Initialize arguments
    callback = (typeof callback === "function") ? callback : function(){};

    alert(text);

    if (text==='waitAnotherAJAX') {
        anotherAJAX(callback);
    } else {
        callback();
    }
}

La limitazione è che eseguirà sempre l'argomento di callback anche se non è definito.




Nuovo a JavaScript Non sono sicuro che il comportamento sia cambiato, ma la soluzione fornita da Jason Bunting (6 anni fa) non funzionerà se possibile. La funzione non è definita.

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

Questo genererà un ReferenceError: possibleFunction is not defined errore ReferenceError: possibleFunction is not defined mentre il motore tenta di risolvere il simbolo possibleFunction (come menzionato nei commenti alla risposta di Jason)

Per evitare questo comportamento puoi solo passare il nome della funzione che vuoi controllare se esiste. Così

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

Questo imposta una variabile in modo che sia la funzione che si desidera controllare o l'oggetto vuoto se non è definito e quindi evita i problemi menzionati sopra.




La maggior parte se non tutte le risposte precedenti hanno effetti collaterali per invocare la funzione

qui le migliori pratiche

hai una funzione

function myFunction() {
        var x=1;
    }
modo diretto per testarlo

//direct way
        if( (typeof window.myFunction)=='function')
            alert('myFunction is function')
        else
            alert('myFunction is not defined');
utilizzando una stringa in modo da poter avere un solo posto per definire il nome della funzione

//byString
        var strFunctionName='myFunction'
        if( (typeof window[strFunctionName])=='function')
            alert(s+' is function');
        else
            alert(s+' is not defined');




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



Provare:

if (!(typeof(callback)=='undefined')) {...}



Prova questo:

callback instanceof Function



Stavo cercando come verificare se una funzione jQuery è stata definita e non l'ho trovata facilmente.

Forse potrebbe averne bisogno;)

if(typeof jQuery.fn.datepicker !== "undefined")



Provare:

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





Links