我最近碰到了几个定义对象方法的库,如下所示:
var someObject = {
myMethod: function myMethod(args){ /* implementation */ }
};
有人可以向我解释双命名的用途是什么吗?我理解function someName(){};
和var someName = function(){};
之间的区别,但这种设置对我来说并没有多大意义。
答案 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