TypeScript变量范围与JavaScript变量范围

时间:2018-07-13 19:06:33

标签: javascript typescript var let

在这个非常常见的问题上,文档之间存在一些有趣的差异。

根据TS文档,用this.data 声明的变量将泄漏出包含函数,但是在MSDN上,它声明var数据不会泄漏,而是可以在整个包含函数中访问。与ECMAScript相比,Typescript处理var的方式可能只是有所不同,因此需要SO对此进行反馈。

According to the TS docs

  

块范围确定当使用let声明变量时,它使用一些   称为词法作用域或块作用域。 不同于使用声明的变量    var,其作用域泄漏到其包含的功能,以块为范围   变量在其最近的包含块之外不可见,或者   for循环。

But according to the MSDN docs

  

let声明的变量的作用域在它们所针对的块中   以及在任何包含的子块中定义。这样,让   工作非常像var。 主要区别是的范围    var变量是整个封闭函数

2 个答案:

答案 0 :(得分:4)

这是说同一件事的两种不同方式

医生说(强调我):

  

用var声明的变量,其范围泄漏到其包含的函数

与说的不同

  

以var声明的变量,其作用域泄漏出 其包含的功能

答案 1 :(得分:1)

TypeScript 已编译到JavaScript。当查看从TypeScript代码生成的JavaScript输出时,您会发现使用关键字var声明的变量只是以相同的方式声明。

因此作用域也是相同的:变量可以在整个包含函数中访问。有时称为hoisting