在编写javascript时,可以用3种不同的方式定义方法。
1]全局命名空间中的函数
function doSomething();
2]作为函数
的成员的函数function Clazz() {}
Clazz.doSomething = function(){};
3]是函数实例
的函数function Clazz() {}
Clazz.prototype.doSomething = function(){};
根据代码组织,可以选择上述方法之一而不是其他方法。
但纯粹从性能角度来看这是最有效的吗? (特别是1到2之间)
如果doSomething有参数,你的答案会不同吗?
答案 0 :(得分:2)
从纯粹的性能POV中,1应该是最快的。原因是它需要较少的工作来设置范围链&执行上下文。此外,如果您从函数中访问任何全局变量,则分辨率将以1加速,同样仅仅因为作用域链的深度。 作为一般规则,进一步向上(接近全局)对象在范围内,它越快。出于同样的原因,访问属性a.b将比访问a.b.c
更快在简单的函数调用的情况下,性能增益可能不会太大,但是如果你将函数称为循环,它可能会挂载。
答案 1 :(得分:1)
这些声明中没有一个做同样的事情而且不可互换,你期望进行什么样的比较?这就像询问实例化10个变量或具有10个项目的数组是否更快:一个是最快的,但结果却不一样。
答案 2 :(得分:0)
您无法比较函数声明之间的性能
例如,在所有3个地方声明的 add(a,b)函数提供相同的性能。性能对您编写代码的方式很重要,而不是您声明函数的位置......
答案 3 :(得分:0)
你错过了最优化的一个:
var x = function(){}
当javascript看到定义时:
function x(){}
然后将其转换为前一种形式。如果你首先这样做,那么加速可以忽略不计。但是为了回答你的问题,这是最优化的。