2012-05-23 97 views
2

是在一些JS代码性能的工作,看到这种方法:在对象中声明函数名称,为什么?

window.sample = { 

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

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

} 

没有任何理由,你为什么会单词“功能”后减速功能的名称?

它有助于调试吗?

它是好还是坏或者只是不必要?

+2

减速....? – JJJ

+1

啊,你的意思**宣布** – Joseph

+0

@JosephtheDreamer哦,对。 (“代码性能”上下文是一条红色的鲱鱼。) – JJJ

回答

1

不是为foo和bar属性指定匿名函数,而是分配指定的函数。

它可以为调试有所帮助:唯一的区别,这使得,我知道的是,你会看到的函数的名称调用堆栈,而不是“JavaScript的匿名函数”

+0

如果你使用console.log(sample),这是不够的吗?然后? – Endless

+0

@Endless我认为@jbabey意味着错误期间堆栈跟踪。如果它没有名字,控制台会说'anonymous function',因为它没有名字。 – Joseph

+0

@约瑟夫啊,我明白了 – Endless

4

秀达唯一的理由是,你可以使用函数本身从函数内不会对对象的引用:

foo: function foo(a,b){ 
    return a > 0 ? a + foo(a-1,b) : b; 
} 
,对于名为函数文本支持

注howeever是跨浏览器并不一致,所以你应该避免使用它。

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中找到。

相关问题