我正在研究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();
});
哪个功能应该更快?我知道它有点矫枉过正,但我有兴趣了解javascript引擎是如何工作的。
答案 0 :(得分:1)
就范围而言,这两者是相同的(它们都是本地的,而不是全局的)。区别在于功能:" this.func2"功能是"公共" (你可以通过引用Ctrl对象的实例来调用该函数),其中" var func1"是一个"私人"功能。
就执行调用的速度而言,我已将这个小测试放在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();在大多数情况下似乎没有显示出显着差异。