【问题标题】:Javascript 'var variable' inside loop vs outside. Any difference in performence循环内部与外部的 Javascript 'var 变量'。性能上的任何差异
【发布时间】:2015-12-17 10:14:04
【问题描述】:
for(var i=0;i<lines.length;i++) {
  var line = lines[i];

对

var line;
for(var i=0;i<lines.length;i++) {
  line = lines[i];

这两个sn-ps有不同的表现吗。如果是,请解释原因。

【问题讨论】:

    标签: javascript var


    【解决方案1】:

    我对此进行了基准测试,发现性能几乎没有差异。

    如果您想重新创建它:

    var lines = new Array(#BIG_NUMBER#);
    
    lines.fill(#BIG_OBJECT#);
    
    var a = (new Date()).getTime();
    
    for(var i=0;i<lines.length;i++) {
      var line = lines[i]; }
    
    var b = (new Date()).getTime();
    
    var line;
    for(var i=0;i<lines.length;i++) {
      line = lines[i]; }
    
    var c = (new Date()).getTime();
    console.log("a:" + (b-a) + " b:" + (c-b));
    

    这是有道理的,因为几乎没有区别,两种情况都会创建一个本地对象,该对象将被存储,并且会多次重新分配它。

    【讨论】:

      【解决方案2】:

      您的代码在这两种情况下的工作方式都会有所不同。

      在第一个line 中是一个全局变量,可以在for 循环 之外访问,而在第二个。

      所以我认为性能比较在这里没有任何意义!

      即便如此,一次又一次地声明一个变量是不必要的,尽管我不认为这是一个复杂的操作。但是是的,重复声明它会降低性能。

      【讨论】:

      • 在第二个变量中,变量也是全局的,并且可以在 for 循环之外访问。在 javascript 中没有块作用域,只有函数作用域。
      • @jcubic 在 ES6 中有块级范围。
      • OP 询问var 而不是let。
      • 即使你是正确的,你也把你的例子弄混了。
      猜你喜欢
      • 2012-01-07
      • 2012-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-10
      相关资源
      最近更新 更多