这是一个非常人为的例子,但是让我们假设我们_this
在类函数的某处创建了一个变量。
class Person {
constructor (public name : string) {}
changeName(name) {
var _this = {};
(() => {
this.name = name;
})();
}
}
当我们调用该函数时,这将无法按预期工作,changeName
因为编译代码的相关部分如下所示:
var _this = this;
var _this = {};
(function () {
_this.name = name;
})();
这是糟糕的 Javascript:我们有两个var
相互覆盖的声明。编译器_this
创建的被我的_this
.
据我所知,TypeScript 规范中没有指定这种行为。
他们为什么要冲突?编译器不能检测我是否创建了一个名为_this
并将自动生成的变量命名为别的变量,比如_this2
防止我的变量和编译器生成的变量相互践踏?