【问题标题】:is it ok to declare javascript variable in if block and use it outside the block? [duplicate]可以在 if 块中声明 javascript 变量并在块外使用它吗? [复制]
【发布时间】:2018-12-16 08:15:41
【问题描述】:

我会用大多数语言编写

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

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

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

我是不是被误导了?

【问题讨论】:

  • it seems its allowed to write 如果您使用的是 let,则不允许使用 - 它具有块范围(与 const 一起。您确定您不考虑 var 吗?)
  • 我建议只声明变量而不在所有条件之前设置它(即“let var;”),并在需要时设置它。多了一行代码,但没有问题,而且 imo 可读性更好。

标签: javascript


【解决方案1】:

是的,你可以使用 var。

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

变量示例

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

使用 let 的示例

if (true) {
 let var1 = 1;
}

console.log(var1)

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

【讨论】:

  • 正如我从包括 Kyle Simpson 的书 YDKJS 在内的许多资源中得出的结论:“程序员应该优先使用 var, let, cost 的具体顺序。let 不是新的 var,我们仍然有在代码的整个范围内需要存在变量的地方使用 var"
  • @Shakespear 很好,您可以通过在最外层范围内定义 let 来做到这一点。
  • 当然,我们可以在最外层范围内定义 let。但是仍然......我认为 let 在 for 循环中发光等等,但我们并不总是必须将 var 替换为 let 关键字 as一个新习惯。
【解决方案2】:

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

所以:

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

将被翻译成:

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

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

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

【讨论】:

    【解决方案3】:

    不,这完全是个坏主意。如果您想在 if 语句内部和外部使用 JavaScript 变量,您可以通过在 if 语句外部声明它来实现。

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

    这样您将只创建一个块范围的变量。但是,如果您使用var var1 = value1,那么它将声明全局范围的变量,这很可能不是您想要的。 要了解有关变量如何在 javascript 中工作的更多信息,您可以查看这个很棒的 article。快乐编码:)

    【讨论】:

      【解决方案4】:

      您可以使用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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-15
        • 1970-01-01
        • 1970-01-01
        • 2019-04-18
        • 2015-01-26
        • 2016-07-03
        • 1970-01-01
        相关资源
        最近更新 更多