在if块中声明javascript变量并在块外使用可以吗

  • 本文关键字:变量 if 声明 javascript javascript
  • 更新时间 :
  • 英文 :


在大多数语言中,我都会编写

declare var1 = undefined
if (condition) {
var1 = value1
}

但在javascript中,似乎允许编写

if (condition) {
let var1 = value1
} else {
var1 = value2
}

我在这方面被误导了吗?

是的,当您使用var.时可以

当您使用letconst时不会,因为它们是块范围的。

var示例

if (true) {
var var1 = 1
}
console.log(var1);

使用let的示例

if (true) {
let var1 = 1;
}
console.log(var1)

p。S:-在JS世界中,使用var被认为是糟糕的编码实践。您应该避免使用它,直到letconst出现无法使用的情况。

在JavaScript中,变量可以在使用后声明。换句话说:变量可以在声明之前使用。提升是JavaScript的默认行为,将所有声明移动到当前范围的顶部(移动到当前脚本或当前函数的顶部(。

因此:

x = 5
// ... some other code ...
var x

将被翻译为:

var x;    
x = 5
// ... some other code

但只有当您使用var来声明变量时,它才会以这种方式工作。如果使用constlet,它将不起作用,因为用letconst声明的变量和常量不会被提升。

在现代javascript中,使用letconst声明变量是首选方式。

不,这完全是个坏主意。如果您想在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

最新更新