【问题标题】:what is the purpose of tslint no-var-keyword - "forbidden 'var' keyword"?tslint no-var-keyword - “禁止'var'关键字”的目的是什么?
【发布时间】:2018-03-23 18:48:45
【问题描述】:

tslint no-var-keyword(“禁止的'var'关键字”)的目的是什么? tslint 似乎在我的代码中每次出现 var 关键字时都会记录一个错误。 tslint 是否声明 var 关键字应无条件地排除在 ng2 中?如果是,那为什么?

【问题讨论】:

标签: angular typescript tslint


【解决方案1】:

规则及其基本原理在此处记录https://palantir.github.io/tslint/rules/no-var-keyword/

使用 var 声明变量有几种极端情况行为,这使得 var 不适合现代代码。 var 声明的变量以其父函数块为作用域,忽略其他控制流语句。 var 有声明“提升”(类似于函数),并且可以在声明之前使用。

由 const 和 let 声明的变量的作用域是定义它们的块,并且不允许在声明之前使用或用另一个 const 或 let 重新声明。

在回答您的第二个问题时,这与 Angular、ng2 或任何其他版本无关。这是一个打字稿问题。是的,他们试图让你完全放弃var,转而支持letconst

let 和 var 的区别在于作用域。您必须在使用前放置声明,并且可以在嵌套范围内重新声明。在 TS 中,你也可以借此机会声明一个不同的类型,尽管我不认可这是一种编程风格。

【讨论】:

    【解决方案2】:

    'var' 已被弃用,取而代之的是 'let'。

    前者创建一个全局变量,这通常被认为是不好的做法,而后者创建一个作用域变量。

    因此,lint 默认强制使用作用域变量。

    【讨论】:

    • 不完全是,var 创建了一个 function 范围的变量(与许多其他具有块范围变量的编程语言相比,这是不寻常的,因此引入了 let具有可能更熟悉的可见性)。
    • 是的,你是对的 - var 不是全局的,而是函数范围的。另见“变量提升”
    猜你喜欢
    • 2018-03-09
    • 2015-12-01
    • 1970-01-01
    • 2010-12-29
    • 1970-01-01
    • 2018-04-04
    • 2012-04-04
    • 2011-03-27
    • 2010-11-15
    相关资源
    最近更新 更多