4

在 Javascript 中,哪种声明格式var更好:

function test1() {
  switch(type) {
    case 1:
        var test = "Hello One"
      break;
    case 2:
        var test = "Hello Two"
      break;
  }
}

或者:

function test2() {
  var test;

  switch(type) {
    case 1:
        test = "Hello One"
      break;
    case 2:
        test = "Hello Two"
      break;
  }
}

test2()中,有 1 行额外的代码要在分配值之前声明test为 a var,但这节省了必须声明var test两次的时间。任何一种方式都比另一种更好吗?

4

3 回答 3

7

javascript 没有块作用域,因此在 switch 块中声明变量不会像您期望的那样工作。

此外,由于变量提升,功能块中的所有变量声明都被解释器提升到顶部,您的代码将如下所示:

function test1() {
  var test;
  var test;

  switch(type) {
    case 1:
        test = "Hello One"
      break;
    case 2:
        test = "Hello Two"
      break;
  }
}

执行提升后,很容易看出为什么第一个块不正确。

于 2013-08-05T17:16:05.980 回答
4

IMO 应该首选第二个。

它更具交流性,更接近实际发生的事情(例如,变量提升)。

我也不喜欢将变量声明隐藏在看起来像范围但不是的范围内。

于 2013-08-05T17:15:50.280 回答
2

你的第一个代码是错误的;你已经多次声明了同一个变量。

JSHint 会抱怨它。

于 2013-08-05T17:14:40.603 回答