重复声明JavaScript变量是否不好?

重复声明JavaScript变量是否不好?,javascript,Javascript,重复声明JavaScript变量是否不好?例如,给定下面的代码,一种方法比另一种好吗?如果是,请解释原因。多谢各位 function func1() { for (var i = 0; i < 100; i++) { var myVar=123; } } 函数func1(){ 对于(变量i=0;i

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

function func1() {
    for (var i = 0; i < 100; i++) {
        var myVar=123;
    }
}
函数func1(){
对于(变量i=0;i<100;i++){
var-myVar=123;
}
}

函数func2(){
var-myVar;
对于(变量i=0;i<100;i++){
myVar=123;
}
}

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

function func1() {
    for (var i = 0; i < 100; i++) {
        var myVar=123;
    }
}
函数func1(){
对于(变量i=0;i<100;i++){
var-myVar=123;
}
}

函数func2(){
var-myVar;
对于(变量i=0;i<100;i++){
myVar=123;
}
}
这是因为,事实上你也可以这样做:

function func3() {
  var i, myVar;
  for (i = 0; i < 100; i++) {
    myVar=123;
  }
}
函数func3(){
varⅠ,myVar;
对于(i=0;i<100;i++){
myVar=123;
}
}

尽管使用
函数func4(){var myVar=123;}
;)可以节省时间

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

function func1() {
    for (var i = 0; i < 100; i++) {
        var myVar=123;
    }
}
函数func1(){
对于(变量i=0;i<100;i++){
var-myVar=123;
}
}

函数func2(){
var-myVar;
对于(变量i=0;i<100;i++){
myVar=123;
}
}
这是因为,事实上你也可以这样做:

function func3() {
  var i, myVar;
  for (i = 0; i < 100; i++) {
    myVar=123;
  }
}
函数func3(){
varⅠ,myVar;
对于(i=0;i<100;i++){
myVar=123;
}
}

尽管使用
函数func4(){var myVar=123;}
;)可以节省时间

这些功能相同

Javascript需要两次遍历代码。在第一个过程中,设置变量(除其他外)

在您的第一个版本中,在解释器的第一个过程中,它将看到您声明了一个变量myVar,并且它将把变量的定义提升到作用域的顶部(这是本例中的函数,因为循环在javascript中没有自己的作用域)

因此,在javascript的第二个过程中,当代码被执行(解释)时,所有内容都是相同的

因此,在javascript中,所有变量的行为就像它们是在作用域的顶部声明的一样,无论您在何处或是否声明它们


javascript有一个潜在的令人困惑的地方,那就是它具有类似c的语法,但与其他类似c的语言有一些显著的差异。这就是其中的一个区别。

它们在功能上是相同的

Javascript需要两次遍历代码。在第一个过程中,设置变量(除其他外)

在您的第一个版本中,在解释器的第一个过程中,它将看到您声明了一个变量myVar,并且它将把变量的定义提升到作用域的顶部(这是本例中的函数,因为循环在javascript中没有自己的作用域)

因此,在javascript的第二个过程中,当代码被执行(解释)时,所有内容都是相同的

因此,在javascript中,所有变量的行为就像它们是在作用域的顶部声明的一样,无论您在何处或是否声明它们


javascript有一个潜在的令人困惑的地方,那就是它具有类似c的语法,但与其他类似c的语言有一些显著的差异。这就是其中的一个区别。

通常认为在一段代码(或函数)的开头声明变量比在随机位置声明变量更好。一个例外是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;
    }
}
函数func2(){
var myVar;//尝试在此处声明所有变量
for(var i=0;i<100;i++){//除for循环变量外
myVar=123;
}
}
我这么做的原因:因为其他语言也是这样工作的,所以它更容易阅读。对于JavaScript的特殊性来说,这并不重要,因为作用域在JavaScript中的工作方式很奇怪


这种函数编写方法的主要参数:可读性。

通常认为在代码(或函数)开头声明变量比在随机位置声明变量更好。一个例外是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;
    }
}
函数func2(){
var myVar;//尝试在此处声明所有变量
for(var i=0;i<100;i++){//除for循环变量外
myVar=123;
}
}
我这么做的原因:因为其他语言也是这样工作的,所以它更容易阅读。对于JavaScript的特殊性来说,这并不重要,因为作用域在JavaScript中的工作方式很奇怪


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

我没有看到任何“重复”。在任何情况下,第一个被解释为与第二个完全相同。@Pointy因此,浏览器并不是每次看到
var.
?Pointy是指“提升”-因为循环不会创建新的作用域,只有函数才会创建,因此,所有变量都在function@Borik不,没有。JavaScript只作用于函数级别的变量。@user1032531哦,我明白你的意思了。不,没关系。这更像是一种时尚,我看不到任何“重复”。在任何情况下,第一个被解释为与第二个完全相同。@Pointy因此,浏览器并不是每次看到
var.
?Pointy是指“提升”-因为循环不会创建新的作用域,只有函数才会创建,因此,所有变量都在function@Borik不,没有。JavaScript只作用于函数级别的变量。@user1032531哦,我明白你的意思了。不,没关系。这更像是一种时尚。今天我学到了-谢谢!节省时间不是我的目标,而是了解事情是如何运作的。我知道,从性能的角度来看,这并不重要。有一种方法更常见,也更适合其他程序员吗@