这个问题在这里已有答案:
在Javascript中有什么区别:
var name = function() { //stuff to do };
{name : function() { //stuff to do } };
function name() { //stuff to do };
由Stoyan Stefanov在"JavaScript Patterns"写的:
在函数声明和命名函数表达式中,定义了name属性。在匿名函数表达式中,它取决于实现;它可以是未定义的(IE)或用空字符串定义(Firefox,WebKit):
function foo() {} // declaration var bar = function () {}; // expression var baz = function baz() {}; // named expression foo.name; // "foo" bar.name; // "" baz.name; // "baz"
在Firebug或其他调试器中调试代码时,name属性很有用。当调试器需要在函数中显示错误时,它可以检查name属性是否存在并将其用作指示符。 name属性还用于从内部递归调用相同的函数。如果您对这两种情况不感兴趣,那么未命名的函数表达式将更容易且更简洁。
针对函数声明的情况和偏好函数表达式的原因是表达式突出显示函数是像所有其他对象一样的对象,而不是一些特殊的语言构造。