Für globale Funktionen können Sie diese anstelle von eval
in einer der Antworten vorgeschlagen.
var global = (function (){
return this;
})();
if (typeof(global.f) != "function")
global.f = function f1_shim (){
// commonly used by polyfill libs
};
Sie können verwenden global.f instanceof Function
auch, aber afaik. der Wert der Function
wird in verschiedenen Frames unterschiedlich sein, so dass es nur bei einer Einzelbildanwendung richtig funktioniert. Deshalb verwenden wir normalerweise typeof
stattdessen. Beachten Sie, dass es in manchen Umgebungen zu Anomalien kommen kann mit typeof f
auch, z.B. von MSIE 6-8 einige der Funktionen z.B. alert
hatte den Typ "Objekt".
Bei lokalen Funktionen können Sie die in der akzeptierten Antwort enthaltene verwenden. Sie können auch testen, ob die Funktion lokal oder global ist.
if (typeof(f) == "function")
if (global.f === f)
console.log("f is a global function");
else
console.log("f is a local function");
Um die Frage zu beantworten, der Beispielcode funktioniert bei mir ohne Fehler in den neuesten Browsern, daher bin ich mir nicht sicher, wo das Problem lag:
function something_cool(text, callback) {
alert(text);
if( callback != null ) callback();
}
Anmerkung: Ich würde verwenden callback !== undefined
anstelle von callback != null
aber sie tun fast dasselbe.