如果“普通函数”是指在脚本根级别声明为function a(){
的函数,那就是附加到窗口对象的函数,是的,存在差异:
- 附加到窗口对象的函数不会被破坏,而匿名函数可以在您不再使用它们时立即被使用。
- 他们可能减慢对窗口对象的其他变量的访问(在根级别附加函数有时会被"cluttering global namespace"限定,但避免它的原因主要是更清洁的代码,避免名称冲突)。
- 匿名函数是closures:它们保留一个指向其封闭范围的指针,这使得可以使用此范围中定义的变量。副作用是这个范围不能在函数之前被使用,因此函数可能比你想象的要重,而不是“正常函数”(你可以添加一个空范围来包含匿名声明并防止这种效果,如果你不需要范围的变量,但我不知道javascript引擎是否可以优化掉部分封闭范围,如果你没有检测到循环引用,我建议你不要这样做。)
但这些差异通常很小,通常你不必注意这一点。在你的大多数页面中,你的匿名函数无论如何都不会被删除,因为你不删除事件处理程序(通常是匿名函数的第一个根本原因)。
全球(过早优化是根等。)我建议你喜欢可读性,只要你没有乱码问题。 Javascript引擎及其GC发生了很大变化,因此您的努力可能毫无用处。
Google有an interesting notice about closure and memory。