使用非常简单的jQuery插件样板:
var _defaults = {
foo: false
};
function Plugin( settings ) {
this.opts = $.extend( {}, _defaults, settings );
}
我有一个doSomething
方法只有在foo
选项设置为true
时才能成功运行,并且在某个时刻还有其他方法可能doSomething()
我在if
语句的位置上陷入了两难境地。首先我想:
Plugin.prototype = {
doSomething: function() {
// Do something that depends on foo
},
method: function() {
...
if ( this.opts.foo ) { this.doSomething() }
},
method: function() {
...
if ( this.opts.foo ) { this.doSomething() }
}
};
但是为了干燥,我决定这样做:
Plugin.prototype = {
doSomething: function() {
if ( this.opts.foo ) {
// Do something that depends on foo
}
},
method: function() {
...
this.doSomething();
},
method: function() {
...
this.doSomething();
}
};
现在,如果doSomething
为foo
,则可以使用false
运行该函数的方法,无论它是否为空。
所以我的问题是,什么是更好的方法?第二个是更短的,但它必须每次查找方法,即使它不一定只是为了运行一个空函数。那么第一个更有效率吗?
哦,是的,我知道这可能是微优化,人们会说不要担心,但我只是好奇......
答案 0 :(得分:0)
调用函数的效率将低于第一种方法。
看看这里的测试: http://geek.michaelgrace.org/2011/02/javascript-performance-hit-calling-function-vs-inline/
他们确认某些浏览器的函数调用速度最多可降低50%。你可以自己测试一下。