javascript var语句和性能

fre*_*hie 6 javascript performance variable-declaration

选项1:没有赋值的多个var

function MyFunction() {

  var a = null;
  var b = null;
  ....
  var z = null;

  a = SomeValue;
  b = SomeValue2;
  ....
}
Run Code Online (Sandbox Code Playgroud)

选项2:一个var语句,没有赋值

function MyFunction() {

  var a, b ..., z;

  a = SomeValue;
  b = SomeValue2;
  ....
}
Run Code Online (Sandbox Code Playgroud)

选项3:带赋值的多个var语句

function MyFunction() {

  var a = SomeValue;
  var b = SomeValue2;
  ....
  var z = SomeValue26;
}
Run Code Online (Sandbox Code Playgroud)

使用特定选项有任何性能优势吗?原始类型赋值AND对象引用赋值是否属实?

感谢您的输入.

gdo*_*ica 17

"过早优化是万恶之源"

我不认为任何这些选项都会有任何重大的性能变化.
(IMO)第三个选项是最易读的选项,最接近动态内存分配,如C#etc'.但这是我的拙见,选择你最喜欢的.

如果它真的困扰你而你无法在没有答案的情况下入睡,请用jsPerf进行测试.


@Chad制作了一个jsPerf让你今晚睡得好...

  • 在声明时分配值比声明然后分配([jsPerf](http://jsperf.com/var-type-comparison))快近60% (2认同)

Mar*_*all 6

要了解性能,首先应了解吊装.我们来看下面的代码:

var x = 1;

function bar(val) {
    var returnVal = val * 2;

    return returnVal;
}

function foo(val) {
    var returnVal = 10;

    returnVal *= bar(val);

    return returnVal;
}

var y = foo(x);

console.log(y); // 20
Run Code Online (Sandbox Code Playgroud)

吊装基本上意味着JavaScript解释器会将变量声明"提升"到其范围的顶部.使这个例子看起来更像这样:

var x, y;

x = 1;

function bar(val) {
    var returnVal;

    returnVal = val * 2;

    return returnVal;
}

function foo(val) {
    var returnVal;

    returnVal = 10;
    returnVal *= bar(val);

    return returnVal;
}

y = foo(x);

console.log(y); // 20
Run Code Online (Sandbox Code Playgroud)

因此,在您给出的示例中,选项2和3基本上会做同样的事情.由于解释器会将这些声明移到顶部.在那时,这是一个偏好的决定.很多人都避免做一些像var x, y, z;说危险的事情.我个人而言,这样做.在我所处的任何范围内,我将在顶部声明所有变量,然后在下面使用它们.但无论哪种方式都有效

现在,你的第一个例子效率最低.吊装后它看起来像这样:

function MyFunction() {
    var a, b, ... z;

    a = null;
    b = null;
    ...
    z = null;

    a = someValue;
    b = someValue2;
    ...
    z = someValueN;
}
Run Code Online (Sandbox Code Playgroud)

它基本上导致设置变量两次.