在这个非常常见的问题上,文档之间存在一些有趣的差异。
根据TS文档,用this.data
声明的变量将泄漏出包含函数,但是在MSDN上,它声明var
数据不会泄漏,而是可以在整个包含函数中访问。与ECMAScript相比,Typescript处理var的方式可能只是有所不同,因此需要SO对此进行反馈。
块范围确定当使用let声明变量时,它使用一些 称为词法作用域或块作用域。 不同于使用声明的变量 var,其作用域泄漏到其包含的功能,以块为范围 变量在其最近的包含块之外不可见,或者 for循环。
But according to the MSDN docs
let声明的变量的作用域在它们所针对的块中 以及在任何包含的子块中定义。这样,让 工作非常像var。 主要区别是的范围 var变量是整个封闭函数:
答案 0 :(得分:4)
这是说同一件事的两种不同方式
医生说(强调我):
用var声明的变量,其范围泄漏到到其包含的函数
与说的不同
以var声明的变量,其作用域泄漏出 其包含的功能
答案 1 :(得分:1)
TypeScript 已编译到JavaScript。当查看从TypeScript代码生成的JavaScript输出时,您会发现使用关键字var
声明的变量只是以相同的方式声明。
因此作用域也是相同的:变量可以在整个包含函数中访问。有时称为hoisting。