在大多数语言中,我都会编写
declare var1 = undefined
if (condition) {
var1 = value1
}
但在javascript中,似乎允许编写
if (condition) {
let var1 = value1
} else {
var1 = value2
}
我在这方面被误导了吗?
是的,当您使用var.时可以
当您使用let
和const
时不会,因为它们是块范围的。
var示例
if (true) {
var var1 = 1
}
console.log(var1);
使用let的示例
if (true) {
let var1 = 1;
}
console.log(var1)
p。S:-在JS世界中,使用var
被认为是糟糕的编码实践。您应该避免使用它,直到let
和const
出现无法使用的情况。
在JavaScript中,变量可以在使用后声明。换句话说:变量可以在声明之前使用。提升是JavaScript的默认行为,将所有声明移动到当前范围的顶部(移动到当前脚本或当前函数的顶部(。
因此:
x = 5
// ... some other code ...
var x
将被翻译为:
var x;
x = 5
// ... some other code
但只有当您使用var
来声明变量时,它才会以这种方式工作。如果使用const
或let
,它将不起作用,因为用let
或const
声明的变量和常量不会被提升。
在现代javascript中,使用let
或const
声明变量是首选方式。
不,这完全是个坏主意。如果您想在If语句内部和外部都使用JavaScript变量,可以通过在If语句外部声明它来实现。
let var1 = value1;
if (condition) {
var1 = value1
} else {
var1 = value2
}
通过这种方式,您将只创建一个块范围的变量。但是,如果您使用var var1 = value1
,那么它将声明全局范围的变量,这可能不是您最想要的。要了解更多关于变量如何在javascript中工作的信息,您可以查看这篇很棒的文章。快乐编码:(
您可以使用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
建议在if
语句范围之外声明var1
:
'use strict';
var condition = false;
var var1 = 42;
if (condition) {
console.log(var1);
} else {
var1 = 43;
console.log(var1);
}
// => 43