在对象中声明函数名,为什么?

时间:2012-05-23 13:03:29

标签: javascript

正在研究一些js代码性能并看到了这种方法:

window.sample = {

    foo: function foo(a,b){
       // code goes here
    }

    bar: function bar(a,b){
       // code goes here
    }

}

有没有理由在“功能”一词之后减速功能名称?

它有助于调试吗?

是好是坏还是不必要?

3 个答案:

答案 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