【问题标题】:Difference between let and var in JavaScript [duplicate]JavaScript中let和var之间的区别[重复]
【发布时间】:2016-09-04 14:41:12
【问题描述】:

我正在阅读 Airbnb (https://github.com/airbnb/javascript) 的 javascript 样式指南。

在2.2节中解释了

let 是块作用域,而不是像 var 那样的函数作用域。

// bad
var count = 1;
if (true) {
  count += 1;
}

// good, use the let.
let count = 1;
if (true) {
  count += 1;
}

我不明白为什么第一个是不好的做法,第二个是不好的,如果 let 和 var 都是块作用域,那么如果我使用它们中的任何一个,它有什么区别?

另外,函数作用域和块作用域有什么区别?

【问题讨论】:

  • 对我来说似乎是个错误。 var 和 let 应该在 if 中才有意义。
  • 可能是重复的。见:stackoverflow.com/a/11444416/1715004
  • "如果 let 和 var 都是块作用域" — 它们不是,这就是重点。
  • 该指南似乎在说永远不能使用 var。
  • 我认为您只是误解了“let 是块作用域而不是函数作用域(如 var)”的含义。更清晰的措辞是“let 是块作用域,而 var 是函数作用域。”

标签: javascript


【解决方案1】:

当某些东西是块作用域时,这意味着您可以更好、更直观地控制生命周期

例如

function a() {
    if (true) {
        var a = 7;
        let b = 42;
    }
}

var a 是在函数范围内被拉出来的,而不是在 if 的块中被隔离,所以像这样;

function a() {
    var a;  // The JS compiler pulls the var out to this level
    if (true) {
        a = 7;
        let b = 42; // but keeps the let in this block.
    }
}

.. 这是反直觉的,有时会导致问题——let 没有这个问题。

【讨论】:

  • 在第一个示例中,a 和 b 在 if 块之外都将不可见,而在第二个示例中,因为您定义了一个外部 if,所以它将是可见的。不过,还是不明白函数作用域和块作用域之间的区别
  • this question 中的答案非常好——看看那些。
猜你喜欢
  • 1970-01-01
  • 2017-01-16
  • 1970-01-01
  • 2018-12-09
  • 2017-11-20
  • 2016-09-24
  • 1970-01-01
  • 2010-12-05
  • 2019-03-29
相关资源
最近更新 更多