2013-10-17 62 views
1

重复声明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; 
    } 
} 
+1

我没有看到任何“重复”。无论如何,第一个被解释为它的写法与第二个完全相同。 – Pointy

+0

@Pointy所以,浏览器不会在每次看到'var ...'时分配内存? – user1032531

+4

尖尖是指“提升” - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var --for循环不会创建新的范围,只有功能,所以所有变量被初始化在函数的顶部 –

回答

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

+3

今天我了解了[hoisting](http://www.adequatelygood.com/JavaScript-Scoping-and-Histing.html) - 谢谢! –

+0

节省时间不是我的目标,而是理解事情的工作方式。我知道从性能角度理解它并不重要。其他程序员是否更常用一种方法并使其更加适应? – user1032531

+0

@ user1032531实际上存在少量争议。一些开发人员认为,如果你始终把'var'放在函数的顶部,那么你就可以避免混淆。其他人认为你应该在使用变量时声明变量,因为它有助于避免意外忘记声明它们。大多数[linters](http://www.jshint.com/)似乎都在前阵营(可能是因为为它编写静态检查器更容易),所以我在这个阵营里,因为我喜欢短裤。 :) – kojiro

2

这些在功能上是相同的。

JavaScript需要两遍代码。在第一次过程中,变量被设置(除其他事项外)。

在你的第一个版本,解释第一遍时会看到,你声明一个变量myVar的,它会葫芦变量的定义范围的顶部(也就是功能在这种情况下,因为循环在javascript中没有自己的作用域)。

因此,在JavaScript的第二遍中,当代码执行(解释)时,所有内容都是相同的。

所以,在javascript中的所有变量的作用就好像它们在范围的顶部声明的那样,而不管在哪里或者是否声明它们。

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

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中很奇怪。

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