【问题标题】:Why should I use block scope instead of function scope?为什么我应该使用块作用域而不是函数作用域?
【发布时间】:2017-04-25 23:04:52
【问题描述】:

功能范围界定对我来说已经 2 年了。现在我到处读到,我应该使用letconst 而不是var。我想这主要是因为它是一个新功能。为什么我更喜欢块作用域?

【问题讨论】:

  • 因为 JS 长期以来一直被批评为不尊重所有其他语言(至少是著名的语言)都尊重的块作用域。现在 JS 正在向那些语言迈进,填补了很多空白。
  • 您不应该这样做,除非您有充分的理由这样做。继续使用 var 的一个很好的理由是它向后兼容。 constlet 限制你的代码运行的环境几乎没有什么好处,你可以从 strict mode 获得类似的好处(这是落后的也兼容)。
  • 你可以在这里阅读,为什么要使用let和const,它是关于“变量提升”stackoverflow.com/questions/3725546/variable-hoisting
  • @RobG 谢谢!我也是这么想的,这个块作用域没有任何优势。我将在我的爱好项目中使用它,我控制环境,否则 ES5 就可以了。
  • @ibrahimmahrir 我可以接受这个理由。所以其他语言的新手学习js比较容易。

标签: javascript ecmascript-6


【解决方案1】:

const 的明显优势是它是一个常量绑定。 let 有一个临时死区,禁止在同一范围内重新声明标识符,因此有助于防止某些错误。

除此之外,当您不需要块作用域时,继续使用 var 并没有错。

【讨论】:

  • Const 很棒,但是 let 会导致一些有趣的错误...例如在初始化之前询问 typeof 块变量会导致错误...
  • @Akxe:如果变量还没有初始化,为什么还要询问类型?我认为let 引发的错误是一个特性。
  • 谢谢!我会保留var,我可能会通过我的业余项目练习letconst
  • @Akxe — 我认为“let 有一个时间死区”涵盖了这一点。
  • 问题是,var 会返回undefined,而let 会使你的程序崩溃
猜你喜欢
  • 1970-01-01
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-22
  • 2016-05-23
  • 1970-01-01
  • 2015-12-13
相关资源
最近更新 更多