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

时间:2018-12-16 08:15:41

标签: javascript

在大多数语言中我都会写

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

但是在javascript中,似乎允许编写

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

我对此有误吗?

4 个答案:

答案 0 :(得分:2)

是的,使用var时可以。

在使用letconst时不会,因为它们是块作用域的。

var的示例

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

使用let的示例

if (true) {
 let var1 = 1;
}

console.log(var1)

PS:-在JS世界中,使用var被认为是不好的编码习惯。您应该避免使用它,直到无法使用letconst

答案 1 :(得分:1)

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

所以:

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

将被翻译为:

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

但是,只有当您使用var来声明变量时,它才可以这样工作。如果您使用constlet,则不会起作用,因为不会使用letconst声明的变量和常量。

在现代javascript中,preferred是使用letconst声明变量的方法。

答案 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