javascript中的非匿名与匿名函数

时间:2013-10-09 11:41:31

标签: javascript

我想知道这有什么区别:

var o = {
    name: 'John',
    getName: function getName() {
       console.log(arguments.callee.name + ' was called');
    }
}

o.getName();

对“常规”匿名方法:

var o = {
    name: 'John',
    getName: function () {
       console.log('getName was called');
    }
}

o.getName();

因为显然第一个似乎有一些好处...... 任何垮台?

2 个答案:

答案 0 :(得分:2)

  

任何垮台?

我会去

var o = {
    name: 'John',
    getName: function getName() {
       console.log('getName was called');
    }
};

如果你有一个命名函数(这对于调试调用堆栈是有益的),log()仍可正常工作。

答案 1 :(得分:1)

唯一的区别是你的第一个例子产生了一个命名函数而你的第二个例子没有。编写错误处理程序时,命名函数非常有用,因为您可以在上下文中获取函数的名称。我确信它们还有其他用途,但我知道检索名称不一定是跨浏览器友好的,所以不要在每个浏览器中使用它。

Live Demo

var myFunctionVar = function test(){
    alert(arguments.callee.name);
};

var myFunctionVar2 = function (){
    alert(arguments.callee.name);
};

myFunctionVar();

myFunctionVar2();

正如RobG和Bergi所指出的,使用上述代码存在问题,因此请在使用前进行更多研究。