我想知道这有什么区别:
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();
因为显然第一个似乎有一些好处...... 任何垮台?
答案 0 :(得分:2)
任何垮台?
是
arguments.callee
已弃用。您应该参考getName
来获取函数对象。.name
是非标准媒体资源,不要指望它可以在每个浏览器中使用。我会去
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所指出的,使用上述代码存在问题,因此请在使用前进行更多研究。