2

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

window.sample = {

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

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

}

有什么理由让你在“function”这个词之后减速函数名?

它有助于调试吗?

它是好是坏还是只是不必要的?

4

3 回答 3

4

唯一的原因是您可以在函数内部使用函数本身,而无需引用对象:

foo: function foo(a,b){
   return a > 0 ? a + foo(a-1,b) : b;
}

但是请注意,对命名函数文字的支持在浏览器中并不一致,因此您应该避免使用它。

于 2012-05-23T13:07:50.757 回答
1

他们没有为 foo 和 bar 属性分配匿名函数,而是分配了命名函数。

它对调试很有帮助:据我所知,唯一的区别是您将看到函数的名称显示在调用堆栈中,而不是“javascript匿名函数”

于 2012-05-23T13:07:02.903 回答
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 关于这个主题的优秀文章中找到。

于 2012-05-23T14:05:40.633 回答