缓存此引用

时间:2014-01-17 11:06:20

标签: javascript performance

在大量使用this的“类”函数中缓存对此上下文的引用是否有意义?

我认为缩小器可以用更短的东西替换self,这会导致文件小一点。这有什么缺点,你会这样做,如果没有,为什么不呢?

示例:

var Klass = function() {
  var self = this;

  self.foo = 'qux';
  self.bar = 'quux';
  self.foobar = true;
  self.foobaz = false;
}

2 个答案:

答案 0 :(得分:1)

1)Imho var self = this是一个构造(作为开发人员)我不想被打扰:我不想改变代码来帮助缩小器。代码应该只存在执行该任务所需的行。

2)我还没有看到一个例子(还有!),文件大小的差异很大,我会重新考虑原则1)

答案 1 :(得分:1)

表现明智我怀疑会有任何显着差异。因此,使用self代替this

,我只能理解两个优点
  1. 缩小代码。
  2. self嵌套函数中的引用。
  3. 缩小代码

    使用self会产生申报费用。因此,如果您只是声明一些参数,则使用self是没有意义的。因此,我编写了一个脚本,用于计算selfthis使用{/ 1}}的可行性。

    alert(test(0));
    
    function test(n) {
        var thisFunction = createThisFunction(n).toString();
        var selfFunction = createSelfFunction(n).toString();
        if (selfFunction.length < thisFunction.length) return n;
        else return test(n + 1);
    }
    
    function createThisFunction(n) {
        var body = repeat(n, "this.x=null;");
        return new Function(body.join(""));
    }
    
    function createSelfFunction(n) {
        var decl = "var s=this;";
        var body = repeat(n, "s.x=null;");
        return new Function(decl + body.join(""));
    }
    
    function repeat(n, x) {
        if (n === 0) return [];
        else return [x].concat(repeat(n - 1, x));
    }
    

    答案是......鼓号:four。这意味着如果您声明了三个或更少的参数,那么最好坚持使用this。如果您有四个或更多参数,那么最好使用self

    1. 使用三个参数时,this的函数在缩小时比使用self的函数少2个字符。
    2. 使用四个参数时,this的函数在缩小时比使用self的函数多1个字符。
    3. 你可以随意使用小提琴,并为自己验证我的断言:http://jsfiddle.net/dB6VS/

      嵌套函数

      有时您需要一个嵌套函数才能访问其父函数的this参数。在这种情况下,您无论如何都需要创建一个self变量。因此,如果您有任何需要访问this的嵌套函数,那么只需切换到self

      简而言之,需要访问this的嵌套函数否决了self的4个声明规则。