在大多数语言中我都会写
declare var1 = undefined
if (condition) {
var1 = value1
}
但是在javascript中,似乎允许编写
if (condition) {
let var1 = value1
} else {
var1 = value2
}
我对此有误吗?
答案 0 :(得分:2)
是的,使用var时可以。
在使用let
和const
时不会,因为它们是块作用域的。
var的示例
if (true) {
var var1 = 1
}
console.log(var1);
使用let的示例
if (true) {
let var1 = 1;
}
console.log(var1)
PS:-在JS世界中,使用var
被认为是不好的编码习惯。您应该避免使用它,直到无法使用let
和const
。
答案 1 :(得分:1)
在JavaScript中,变量可以在使用后声明。 换句话说:变量可以在声明之前使用。 提升是JavaScript的默认行为,即将所有声明移动到当前作用域的顶部(当前脚本或当前函数的顶部)。
所以:
x = 5
// ... some other code ...
var x
将被翻译为:
var x;
x = 5
// ... some other code
但是,只有当您使用var
来声明变量时,它才可以这样工作。如果您使用const
或let
,则不会起作用,因为不会使用let
或const
声明的变量和常量。
在现代javascript中,preferred是使用let
或const
声明变量的方法。
答案 2 :(得分:1)
不,这完全是个坏主意。如果要在if语句的内部和外部都使用JavaScript变量,可以通过在if语句之外进行声明来实现。
let var1 = value1;
if (condition) {
var1 = value1
} else {
var1 = value2
}
这样,您将仅创建块范围的变量。但是,如果使用var var1 = value1
,它将声明全局范围的变量,这不是您最可能想要的变量。
要了解有关变量在javascript中的工作原理的更多信息,您可以查看一下这款出色的article。快乐的编码:)
答案 3 :(得分:1)
您可以使用let
来执行此操作,但不能在严格模式中使用!
'use strict';
var condition = false;
if (condition) {
let var1 = 42;
console.log(var1);
} else {
var1 = 43;
console.log(var1);
}
// ReferenceError: var1 is not defined
建议在var1
语句的范围之外声明if
:
'use strict';
var condition = false;
var var1 = 42;
if (condition) {
console.log(var1);
} else {
var1 = 43;
console.log(var1);
}
// => 43