Para funciones globales, puede usar esta en lugar de la eval
sugerida 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 Function
también, pero afaik. el valor de Function
será diferente en diferentes cuadros, por lo que solo funcionará correctamente con una aplicación de un solo cuadro. Es por eso que generalmente usamos typeof
en 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, alert
tení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 !== undefined
lugar de callback != null
, pero hacen casi lo mismo.