1

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

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

有人可以向我解释双重命名的用途吗?我理解 和 之间的区别function someName(){};var someName = function(){};但这种设置对我来说没有多大意义。

4

1 回答 1

1

这样做有几个原因。

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

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

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

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

没有“副作用”,将函数名称视为附加的“私有”变量,并引用只能从函数本身内部访问的函数,方法名称作为“公共”属性名称,您可以更改和使用从外部访问它。

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

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
于 2014-11-02T22:22:51.157 回答