Para funciones globales, puede usar esta en lugar de la evalsugerida en una de las respuestas.
var global = (function (){
return this;
})();
if (typeof(global.f) != "function")
global.f = function f1_shim (){
// commonly used by polyfill libs
};
Puedes usar global.f instanceof Functiontambién, pero afaik. el valor de Functionserá diferente en diferentes cuadros, por lo que solo funcionará correctamente con una aplicación de un solo cuadro. Es por eso que generalmente usamos typeofen su lugar. Tenga en cuenta que en algunos entornos también puede haber anomalías typeof f, por ejemplo, por MSIE 6-8, algunas de las funciones, por ejemplo, alerttenían el tipo "objeto".
Por funciones locales puede usar el de la respuesta aceptada. Puede probar si la función es local o global también.
if (typeof(f) == "function")
if (global.f === f)
console.log("f is a global function");
else
console.log("f is a local function");
Para responder a la pregunta, el código de ejemplo funciona para mí sin error en los últimos navegadores, por lo que no estoy seguro de cuál fue el problema:
function something_cool(text, callback) {
alert(text);
if( callback != null ) callback();
}
Nota: usaría en callback !== undefinedlugar de callback != null, pero hacen casi lo mismo.