我最近遇到了几个定义对象方法的库,如下所示:
var someObject = {
myMethod: function myMethod(args){ /* implementation */ }
};
有人可以向我解释双重命名的用途吗?我理解 和 之间的区别function someName(){};
,var someName = function(){};
但这种设置对我来说没有多大意义。
我最近遇到了几个定义对象方法的库,如下所示:
var someObject = {
myMethod: function myMethod(args){ /* implementation */ }
};
有人可以向我解释双重命名的用途吗?我理解 和 之间的区别function someName(){};
,var someName = function(){};
但这种设置对我来说没有多大意义。
这样做有几个原因。
如果你想从函数内部引用函数本身,最好命名而不是使用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