最有效的javascript方法声明

最有效的javascript方法声明,javascript,performance,Javascript,Performance,在编写javascript时,可以用3种不同的方式定义方法 1] 全局命名空间中的函数 function doSomething(); 2] 作为函数成员的函数 function Clazz() {} Clazz.doSomething = function(){}; 3] 作为函数实例成员的函数 function Clazz() {} Clazz.prototype.doSomething = function(){}; 根据代码组织,可以选择上述方法之一,而不是其他方法 但从性能的角度

在编写javascript时,可以用3种不同的方式定义方法

1] 全局命名空间中的函数

function doSomething();
2] 作为函数成员的函数

function Clazz() {}
Clazz.doSomething = function(){};
3] 作为函数实例成员的函数

function Clazz() {}
Clazz.prototype.doSomething = function(){};
根据代码组织,可以选择上述方法之一,而不是其他方法

但从性能的角度来看,哪一个是最有效的?(特别是在1和2之间)


如果doSomething有参数,您的答案会有所不同吗?

这些声明没有一个做相同的事情,并且不能互换,您希望进行什么样的比较?这就像询问实例化10个变量或一个包含10个项的数组是否更快:一个最快,但结果不一样。

您无法比较函数声明之间的性能


例如,add(a,b)在所有3个位置声明的函数具有相同的性能。性能取决于您如何编写代码,而不是在何处声明函数…

从纯性能角度来看,1应该是最快的。原因是,设置范围链和执行上下文所需的工作更少。此外,如果您从函数中访问任何全局变量,那么使用1的解析速度将最快,这也是因为作用域链的深度。 一般来说,对象在作用域中越高(接近全局),速度越快。出于同样的原因,访问属性a.b将比访问a.b.c更快


对于简单的函数调用,性能增益可能不会太大,但是如果您在循环中调用函数,性能增益可能会增加。

您缺少最优化的函数:

var x = function(){}
当javascript看到定义时:

function x(){}

然后将其转换为前一种形式。如果你这样做的话,首先会有一个可忽略的加速。但是为了回答您的问题,这是最理想的。

您也可以使用。在我看来,这个Q不需要是wiki,除非您喜欢。我不知道,在“社区wiki”框中打勾的标准是什么。我认为最好勾选它,这样其他人就可以修改问题中的任何错误。如果有任何指导方针,我很想知道。谢谢。社区维基是为那些没有明确对错答案的问题设计的,比如“你最喜欢的框架是什么,为什么?”。足够高的代表级别(>2000)的成员可以编辑任何问题和答案,无论如何。会员在CW问题、问题或答案中的投票不会获得代表分数,因此一般情况下,最好仅将其用于主观/讨论类型的问题。你的问题是关于性能的,这是一个非常具体的问题,很适合作为一个普通的SO问题。你忘记了#4:一个函数可以在另一个函数中声明,它将具有局部作用域。这也是最快的。这并不完全正确。全局作用域比局部作用域慢。除非你声明了数百万个函数,否则它与现代浏览器有什么区别吗?你不会注意到的。希望答案有用:-)