Для глобальных функций вы можете использовать эту функцию вместо eval
, предложенного в одном из ответов.
var global = (function (){
return this;
})();
if (typeof(global.f) != "function")
global.f = function f1_shim (){
// commonly used by polyfill libs
};
Вы также можете использовать global.f instanceof Function
, но afaik. значение Function
будет отличаться в разных кадрах, поэтому оно будет правильно работать только с приложением из одного кадра. Вот почему мы обычно используем typeof
вместо этого. Обратите внимание, что в некоторых средах могут быть аномалии и с typeof f
, например, согласно MSIE 6-8 некоторые функции, например alert
, имели тип "объект".
По локальным функциям вы можете использовать тот, который принят в ответе. Вы можете проверить, является ли функция локальной или глобальной.
if (typeof(f) == "function")
if (global.f === f)
console.log("f is a global function");
else
console.log("f is a local function");
Чтобы ответить на вопрос, пример кода работает для меня без ошибок в последних браузерах, поэтому я не уверен, что с ним было:
function something_cool(text, callback) {
alert(text);
if( callback != null ) callback();
}
Примечание: я бы использовал callback !== undefined
вместо callback != null
, но они делают почти то же самое.