我正在研究angularJs和javascript优化。
我最近看过YUI创作者的视频,该视频是有关javascript优化的javascript专家。他解释了变量声明和作用域以及javascript的工作原理。以及javascript引擎如何从当前作用域到全局作用域寻找变量以找到它,等等(参考:http://jonraasch.com/blog/10-javascript-performance-boosting-tips-from-nicholas-zakas)
我的问题是(不是特定于angularjs的)是:
当在我的控制器中我声明一个函数,如:
app.controller('Ctrl', function() {
var func1 = function() {
console.log("Hello");
}
this.func2 = function() {
console.log("World");
}
func1();
this.func2();
});
哪个功能应该更快?我知道它的矫kill过正,但我对了解javascript引擎的工作原理很感兴趣。
最佳答案
就范围而言,这两个是相同的(它们都是本地的,而不是全局的)。功能上的区别在于:“ this.func2”函数是“ public”(您可以通过引用Ctrl对象的实例来调用该函数),其中“ var func1”是“ private”函数。
就执行呼叫的速度而言,我在jspref上进行了以下小测试:
http://jsperf.com/private-vs-public-speed-js
Benchmark.prototype.setup = function() {
var obj = (function() {
this.f1 = function() {
console.log('a');
}
var f2 = function() {
console.log('a')
}
return {
f1: f1,
f2: f2
}
})();
};
“使用公共方法”之间的比较
obj.f1();
至
“使用私有方法”
obj.f2();大部分时间似乎并没有显示出显着差异。