2010-07-20 57 views
1

在编写javascript时,可以用3种不同的方式定义一个方法。最有效的javascript方法声明

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

function doSomething(); 

2] A函数是一个函数

function Clazz() {} 
Clazz.doSomething = function(){}; 

] 3所述的函数是的函数实例的memeber的构件

function Clazz() {} 
Clazz.prototype.doSomething = function(){}; 

根据代码组织,可以选择上述其中一种方法。

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

如果doSomething有论点,您的答案会不同吗?

+1

您也可以使用[模块模式](http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth) – sje397 2010-07-20 07:46:51

+1

在我看来,这不需要成为维基,除非是你的偏好。 – JAL 2010-07-20 07:48:58

+0

我不知道,勾选“社区wiki”框的标准是什么。我认为最好勾选它,以便其他人可以修改问题中的任何不准确之处。如果有任何指导方针,我很想知道。谢谢。 – Jayesh 2010-07-20 11:43:52

回答

2

从纯粹的性能POV来看,1应该是最快的。原因是它需要较少的工作来设置范围链执行上下文。此外,如果您从函数内部访问任何全局变量,分辨率将以1为最快,这仅仅是因为范围链的深度。 作为一般原则,进一步向上(接近全球)范围内的对象速度越快。出于同样的原因,访问属性a.b会比访问a.b.c更快速,但是如果说简单的函数调用,性能增益可能不会太高,但是如果说你调用函数n循环,性能增益可能不会太高。

+0

这不完全正确。全局范围比本地范围慢。 – bluesmoon 2010-07-21 06:48:58

1

这些声明都没有做同样的事情,也不可互换,你期望什么样的比较?这就像是询问是否更快地实例化10个变量或具有10个项目的数组:一个是最快的,但结果不一样。

0

你不能比较的函数声明之间的性能,

例如加(A,B)中的所有3个地方宣称功能给予同样的性能。性能很重要,你的代码如何编写,而不是你声明你的函数的地方......

+0

范围链确实重要 – Lauri 2010-07-20 09:00:53

0

你缺少最优化的一个:

var x = function(){} 

JavaScript时看到的定义:

function x(){} 

它然后将其转换为前者的形式。如果你首先这样做,那么速度可以忽略不计。但为了回答你的问题,这是最优的。

+0

除非您声明数百万个函数,否则它是否与现代浏览器有所不同? – tstenner 2011-05-25 11:48:45

+0

没有你会注意到的。希望答案很有用:-) – 2011-06-11 13:05:45