重复声明JavaScript变量是不是很糟糕?

时间:2013-10-17 23:23:11

标签: javascript

重复声明JavaScript变量是不是很糟糕?例如,鉴于以下代码,一种方法比另一种方法更好?如果是这样,请解释原因。谢谢

function func1() {
    for (var i = 0; i < 100; i++) {
        var myVar=123;
    }
}

OR

function func2() {
    var myVar;
    for (var i = 0; i < 100; i++) {
        myVar=123;
    }
}

3 个答案:

答案 0 :(得分:4)

实际上,这些代码示例是等效的,可能会编译为相同的字节码。

function func1() {
    for (var i = 0; i < 100; i++) {
        var myVar=123;
    }
}

function func2() {
    var myVar;
    for (var i = 0; i < 100; i++) {
        myVar=123;
    }
}

这是因为hoisting,事实上你也可以这样做:

function func3() {
  var i, myVar;
  for (i = 0; i < 100; i++) {
    myVar=123;
  }
}

虽然您可以使用function func4() { var myVar=123; };)

节省时间

答案 1 :(得分:2)

这些在功能上是相同的。

Javascript需要两次通过代码。在第一次传递期间设置变量(除其他外)。

在你的第一个版本中,在解释器的第一次传递过程中,它将看到你声明一个变量myVar,它将变量的定义提升到范围的顶部(这是在这种情况下函数是因为循环在javascript中没有自己的作用域。

因此,在javascript的第二遍中,当代码被执行(解释)时,一切都将是相同的。

因此,javascript中的所有变量都表现为在范围顶部声明,无论您在何处或是否声明它们。

关于javascript的一个可能令人困惑的事情是它有类似语法,但与其他类c语言有一些显着差异。这是其中一个差异。

答案 2 :(得分:0)

通常认为在一段代码(或函数)的开头声明变量比在随机位置声明变量更好。一个例外是for循环。

function func2() {
    var myVar; // try to declare all variables here
    for (var i = 0; i < 100; i++) { // except for the for-loop variable
        myVar = 123;
    }
}

为什么我这样做:因为其他语言也是如此,所以它更容易阅读。对于JavaScript特异性而言,它并不重要,因为范围在JavaScript中很奇怪。

这种函数编写方式的主要论点:可读性。