2015-02-05 3 views
1

В этой ситуации аргументы.callee.name ничего не получают.Как получить текущее имя текущей функции при объявлении с помощью функции "foo = function() {...}"?

foo = function(){ 
    console.log(arguments.callee.name); 
} 

Есть ли решение?

+2

Решение является правильным. У вашей функции нет имени. – Bergi

+0

Почему вы пытаетесь это сделать? Аргумент callee - черная магия и не будет работать в строгом режиме. – hugomg

+0

Зачем вам нужно имя функции? –

ответ

0

Вы не назвали его, поэтому у него нет имени.

foo = function(){ 
    return (arguments.callee.name); 
}; 

bar = function foobar() { 
    return (arguments.callee.name); 
}; 

function foobar() { 
    return (arguments.callee.name); 
} 

console.log(foo()); //"" 
console.log(bar()); //"foobar" 
console.log(foobar()) //"foobar" 

Разница между foo() и foobar() является то, что foo() является выражением функции, тогда как foobar() является объявлена ​​функция. Разница между foo() и bar() и заключается в том, что у одного есть имя, а другое нет. Оба являются выражением функции. Объявленным функциям требуется имя, выражение функции - нет. Смотрите этот канонический вопрос для получения дополнительной информации:

var functionName = function() {} vs function functionName() {}

Смежные вопросы