正在研究一些js代码性能并看到了这种方法:
window.sample = {
foo: function foo(a,b){
// code goes here
}
bar: function bar(a,b){
// code goes here
}
}
有没有理由在“功能”一词之后减速功能名称?
它有助于调试吗?
是好是坏还是不必要?
答案 0 :(得分:4)
唯一的原因是你可以在函数中使用函数本身,而无需引用该对象:
foo: function foo(a,b){
return a > 0 ? a + foo(a-1,b) : b;
}
请注意,对于命名函数文字的支持在浏览器中并不一致,因此您应该避免使用它。
答案 1 :(得分:1)
不是为foo和bar属性分配匿名函数,而是分配命名函数。
它有助于调试:我知道的唯一不同之处在于,您将看到函数的名称显示在调用堆栈中而不是“javascript匿名函数”
答案 2 :(得分:0)
这是一个名为的函数表达式。函数名称仅作为函数本身的变量提供。这对于递归很有用,例如:
var obj = {
foo: function foo(node) {
// Do something to node
var childNode = node.firstChild;
while (childNode) {
foo(childNode);
childNode = childNode.nextSibling;
}
}
};
大多数浏览器也可以通过函数的非标准name
属性使用该函数的名称,这有助于在调试或检查堆栈跟踪时识别函数。
IE< 9有一个有缺陷的实现,所以你在使用它时需要小心。有关详细信息,请参阅Juriy Zaytsev's excellent article on the subject。