我正在研究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();大部分时间似乎并没有显示出显着差异。

09-15 12:19