我应该包含/删除构造函数中声明的变量吗?

时间:2015-05-04 20:24:02

标签: javascript closures javascript-objects

有些东西让我对JavaScript关闭感到烦恼。一旦构造函数完成执行,使用var关键字创建的变量仍然存在于内存中。例如:



function RangeCalculator(values) {
  var min = Infinity;
  var max = -Infinity;
  for (var i = 0; i < values.length; ++i) {
    min = Math.min(min, values[i]);
    max = Math.max(max, values[i]);
  }

  this.range = max - min;
  
  this.getMin = function() {
    return min;
  };
  this.getMax = function() {
    return max;
  };
}

r = new RangeCalculator([1, 2, 3, 4, 5]);
console.log("min: " + r.getMin() + ", max: " + r.getMax());
&#13;
<p>Check the console</p>
&#13;
&#13;
&#13;

在该代码中,minmax无法从构造函数中定义的函数以外的任何位置访问。这允许在JavaScript中创建私有成员变量。

但是,如果我只想使用最小和最大变量来帮助我计算范围,但之后并不需要它们。如果我删除了getMin和getMax函数怎么办?构造函数中使用的所有var - 声明变量是否仍然存在并占用内存空间,包括for循环中的i

如果我将该代码包装在一个自动执行的匿名函数中会怎么样?

function RangeCalculator(values) {
    (function (t) {
        var min = Infinity;
        var max = -Infinity;
        for (var i = 0; i < values.length; ++i) {
            min = Math.min(min, values[i]);
            max = Math.max(max, values[i]);
        }
        t.range = max - min;
    })(this);
}

var r = new RangeCalculator([1, 2, 3, 4, 5]);
alert(r.range);

0 个答案:

没有答案