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

时间:2014-11-02 22:01:39

标签: javascript methods function-expression

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

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

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

1 个答案:

答案 0 :(得分:1)

有几个原因可以做到这一点。

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

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

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

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

没有“副作用”,请将该函数的名称视为附加的“私有”var,其中只能从函数本身访问该函数,并且方法名称可以作为“公共”属性名称使用更改并使用从外部访问它。

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

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