Javascript 双重命名方法会产生副作用吗?

Javascript 双重命名方法会产生副作用吗?,javascript,methods,function-expression,Javascript,Methods,Function Expression,我最近遇到了几个库,它们定义了对象上的方法,如下所示: var someObject = { myMethod: function myMethod(args){ /* implementation */ } }; 有人能给我解释一下双重命名的用途吗?我理解函数someName(){}和var someName=function(){},但这种设置对我来说没有多大意义。这样做有几个原因 如果要从函数内部引用函数本身,最好将其命名,而不是使用参数.callee(您甚至不能在严格模式下使

我最近遇到了几个库,它们定义了对象上的方法,如下所示:

var someObject = {
    myMethod: function myMethod(args){ /* implementation */ }
};

有人能给我解释一下双重命名的用途吗?我理解
函数someName(){}
var someName=function(){},但这种设置对我来说没有多大意义。

这样做有几个原因

  • 如果要从函数内部引用函数本身,最好将其命名,而不是使用
    参数.callee
    (您甚至不能在严格模式下使用)

  • 如果您使用console.log函数,则会看到方法的名称,而不是匿名函数

  • 使用命名函数记录错误更好,因为名称将添加到堆栈跟踪中,而不是匿名条目。分析(cpu/内存)也是如此

  • 如果将该方法指定给另一个对象,则函数名保持不变,即使属性名发生更改

没有“副作用”,请将函数名视为附加的“private”var,并引用只能从函数本身内部访问的函数,将方法名视为“public”属性名,您可以更改并使用它从外部访问

它与函数声明中的名称不同

var someObject = { 
  publicName:function privateName(){
    someObject.publicName(); // is defined
    privateName(); // is defined
  } 
};
function test() {}

test(); // is defined
privateName(); // is undefined
someObject.privateName(); // also undefined
someObject.publicName(); //is defined

嗯..这是一个对象初始值设定项(在中描述)。也许我没有足够清楚地解释这个问题:我想知道为什么myMethod既是对象定义中的键,又是通过函数定义命名的函数。这样做有什么好处吗?例如,在myMethod中调用它不必键入someObject.myMethod。因此,在方法自身的闭包中,递归执行时可以将其用作快捷方式?这似乎是对大量罗嗦的最低回报。。另外:函数名是如何带入闭包的?必须: