重复声明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;
}
}
答案 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中很奇怪。
这种函数编写方式的主要论点:可读性。