Вы можете использовать toString()
, чтобы выяснить, является ли функция анонимной, при условии, что она объявлена как именованная функция, а не как безымянная функция, назначенная переменной:
function jim () { var h = "hello"; }
function jeff(func)
{
var fName;
var inFunc = func.toString();
var rExp = /^function ([^\s]+) \(\)/;
if (fName = inFunc.match(rExp))
fName = fName[1];
alert(fName);
}
Даст вам название функции, если таковая имеется.
jeff(function () { blah(); }); // alert: null;
jeff(function joe () { blah(); }); // alert: "joe";
jeff(jack); // "jack" if jack is function jack () { }, null if jack = function() {}
Мое предыдущее редактирование ссылалось на причуду IE, которой не было в других браузерах и которая больше не действительна в IE начиная с версии 9. Однако вы все равно можете назначать именованные функции как свойства объекта, используя выражение именованной функции:
var obj = {
fn: function namedFunction () { }
};
Это работает во всех браузерах, но IE 8 и ниже не соответствуют спецификации, в которой говорится, что функция доступна только под этим именем внутри своего блока.