Javascript 什么时候在函数中创建局部变量已经更好了?

Javascript 什么时候在函数中创建局部变量已经更好了?,javascript,Javascript,假设我总共有6个全局变量,我要在函数中调用它们 如果我每次调用它们3次,在函数中创建一个局部变量是否已经更好了,它会更快地运行函数吗 我现在每个都用了20次,所以我猜肯定更好?我在谷歌chrome上查看网络时间,但我想这是一个太小的测试,因为我总是得到6-7毫秒 我把一个表的长度放在一个变量中,我被告知会运行'for'而不是每次都获取长度,最好将其存储在函数的本地变量中。然后我有另外6个变量,我分配给函数中的局部变量,这是最佳实践吗?如果是这样的话,你会说什么时候最好在函数中声明一个局部变量,如

假设我总共有6个全局变量,我要在函数中调用它们

如果我每次调用它们3次,在函数中创建一个局部变量是否已经更好了,它会更快地运行函数吗

我现在每个都用了20次,所以我猜肯定更好?我在谷歌chrome上查看网络时间,但我想这是一个太小的测试,因为我总是得到6-7毫秒

我把一个表的长度放在一个变量中,我被告知会运行'for'而不是每次都获取长度,最好将其存储在函数的本地变量中。然后我有另外6个变量,我分配给函数中的局部变量,这是最佳实践吗?如果是这样的话,你会说什么时候最好在函数中声明一个局部变量,如果我至少调用该变量多少次

如果我每次调用它们3次,在函数中创建一个局部变量是否已经更好了,它会更快地运行函数吗

没有达到任何可察觉的程度。您应该避免使用全局变量的原因是,它们可能会与您正在运行的任何第三方实用程序发生冲突,可能会与您的浏览器正在运行的任何插件发生冲突,坦率地说,这会使代码更难阅读

如果函数需要6个变量,则在函数内部创建这些变量

如果有3个函数共享相同的6个变量,那么您有一个非常希望创建的对象——重构代码以反映这一点

比如说:

var a = 1,
    b = 2,
    c = 3;

function f1(){
    //use a, b, and c
}

function f2(){
    //use a, b, and c
}
var obj = {
    a: 1,
    b: 2,
    c: 3,
    f1: function(){
       alert(this.a);
    },
    f2: function(){
       //use this.a, this.b, and this.c
    }
};
会变成这样:

var a = 1,
    b = 2,
    c = 3;

function f1(){
    //use a, b, and c
}

function f2(){
    //use a, b, and c
}
var obj = {
    a: 1,
    b: 2,
    c: 3,
    f1: function(){
       alert(this.a);
    },
    f2: function(){
       //use this.a, this.b, and this.c
    }
};
当然,如果您希望a、b和c对对象是私有的,您可以使用闭包进行创作:

var obj = (function(){
   var a = 1,
       b = 2,
       c = 3;
   return {
      f1: function(){
         alert(a);
      },
      f2: function(){
         //use a, b, and c
      }
   };
})();
如果我每次调用它们3次,在函数中创建一个局部变量是否已经更好了,它会更快地运行函数吗

没有达到任何可察觉的程度。您应该避免使用全局变量的原因是,它们可能会与您正在运行的任何第三方实用程序发生冲突,可能会与您的浏览器正在运行的任何插件发生冲突,坦率地说,这会使代码更难阅读

如果函数需要6个变量,则在函数内部创建这些变量

如果有3个函数共享相同的6个变量,那么您有一个非常希望创建的对象——重构代码以反映这一点

比如说:

var a = 1,
    b = 2,
    c = 3;

function f1(){
    //use a, b, and c
}

function f2(){
    //use a, b, and c
}
var obj = {
    a: 1,
    b: 2,
    c: 3,
    f1: function(){
       alert(this.a);
    },
    f2: function(){
       //use this.a, this.b, and this.c
    }
};
会变成这样:

var a = 1,
    b = 2,
    c = 3;

function f1(){
    //use a, b, and c
}

function f2(){
    //use a, b, and c
}
var obj = {
    a: 1,
    b: 2,
    c: 3,
    f1: function(){
       alert(this.a);
    },
    f2: function(){
       //use this.a, this.b, and this.c
    }
};
当然,如果您希望a、b和c对对象是私有的,您可以使用闭包进行创作:

var obj = (function(){
   var a = 1,
       b = 2,
       c = 3;
   return {
      f1: function(){
         alert(a);
      },
      f2: function(){
         //use a, b, and c
      }
   };
})();

是的,将值保持在范围内总是会更快。然而,它是否对代码的性能有影响则是另一个问题。当您遇到性能问题时,请担心它。在这种情况下,我相信其他部分比可变分辨率有更大的影响。我同意Felix的观点。正如Donald Knuth所说:“过早优化是万恶之源”,也就是说,我不喜欢微观基准测试,主要观点是“只有在必须的时候才担心微观性能的改进”,我完全同意这一点。相关:是的,将值保持在范围内总是会更快。然而,它是否对代码的性能有影响则是另一个问题。当您遇到性能问题时,请担心它。在这种情况下,我相信其他部分比可变分辨率有更大的影响。我同意Felix的观点。正如Donald Knuth所说:“过早优化是万恶之源”,也就是说,我不喜欢微观基准测试,主要观点是“只有在必须的时候才担心微观性能的改进”,我完全同意。相关:+1用于等待创建的对象。此外,过早优化是所有罪恶的根源97%的时间:)嘿,非常感谢你的帮助!当你们说过早优化时,你们的意思是从一开始就尝试优化而没有完整的图片(即所有可用的代码),你们很可能在将来给自己设置麻烦?或者它有不同的含义吗?@恨-本质上。基本上,你不应该试图猜测什么会变慢,而应该基于这种猜测进行微观优化。只需使用标准、最佳实践编写代码,在编写代码的过程中,对任何慢的代码进行优化。再次感谢大家的支持help@Hate-我不会费心在地板上打电话的。我无法想象这会有什么不同。对于等待创建的对象+1。此外,过早优化是所有罪恶的根源97%的时间:)嘿,非常感谢你的帮助!当你们说过早优化时,你们的意思是从一开始就尝试优化而没有完整的图片(即所有可用的代码),你们很可能在将来给自己设置麻烦?或者它有不同的含义吗?@恨-本质上。基本上,你不应该试图猜测什么会变慢,而应该基于这种猜测进行微观优化。只需使用标准、最佳实践编写代码,在编写代码的过程中,对任何慢的代码进行优化。再次感谢大家的支持help@Hate-我不会费心在地板上打电话的。我无法想象这会有什么不同。