哪个函数声明更快? var functionName或this.functionname

时间:2014-05-11 18:14:18

标签: javascript performance angularjs optimization

我正在研究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引擎是如何工作的。

1 个答案:

答案 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();在大多数情况下似乎没有显示出显着差异。