這是一個非常人爲的例子,但讓我們假設我們在類函數的某個地方創建了一個變量_this
。應該創建一個名爲_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
,以使我的變量和編譯器生成的變量不會相互踩踏?
這對我來說似乎是一個非常嚴重的問題。它應該至少包含在語言規範中。我建議在[TypeScript問題跟蹤器](http://typescript.codeplex.com/workitem/list/basic)上發佈這個官方回覆。 – joshuapoehls