1

重复声明 JavaScript 变量是不是很糟糕?例如,给定下面的代码,一种方法比另一种更好吗?如果是,请解释原因。谢谢

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;
    }
}
4

3 回答 3

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;
    }
}

这是因为提升,实际上你也可以这样做:

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

尽管您可以节省时间function func4() { var myVar=123; };)

于 2013-10-17T23:30:48.330 回答
2

这些在功能上是相同的。

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

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

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

因此,在 javascript 中,所有变量的行为都好像它们是在范围的顶部声明的,无论您在哪里声明它们,或者是否声明它们。

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

于 2013-10-17T23:31:21.603 回答
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 中的工作方式很奇怪。

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

于 2013-10-17T23:37:42.860 回答