해야를 만드 라는 변수 _this 충돌과 함께 이?
-
13-12-2019 - |
문제
이것은 매우 인위적인 예는,하지만 우리가 만들 변수 _this
어딘가에서 클래스 기능이다.
class Person {
constructor (public name : string) {}
changeName(name) {
var _this = {};
(() => {
this.name = name;
})();
}
}
이것이 예상대로 작동하지 않을 때 우리는 전화 changeName
기능 때문에의 관련 부분을 컴파일 된 코드는 다음과 같습니다:
var _this = this;
var _this = {};
(function () {
_this.name = name;
})();
이것은 나쁜 자바 스크립트:우리는 두 개의 var
선언을 덮어쓰다.이 _this
여 만든 컴파일러를 덮어쓰에 의해 나 _this
.
지금까지 볼 수 있듯이,이 문제지에서 지정된 타이프 라이터 spec.
왜 그들은 해야 합니까?할 수 없는 컴파일러를 감지하는 경우가 만든 라는 변수 _this
와의 이름을 자동으로 생성되는 하나의 같은 다른 뭔가 _this2
내 계 변수와 컴파일러에서 생성된 것을 짓밟고에 각각 다른?
해결책
컴파일러는 자동으로 생성 _this
참고로 this
을 용이하게 폐쇄될 것이다에 의해 만들어를 사용하여 람다는 구문을 사용합니다.난데없이 타이프 라이터 명세서 어딘가에,그러나 나는 것에 동의하는 컴파일러내야 합류가 이 경우.
내가 좋아하지 않는 아이디어의 컴파일러는 다양한 방법이 방출로 자바 스크립트와 충돌이 명시된 목표를 생성하는"숙"(므로 예측 가능)javascript.
다른 팁
그것은 당신이 무엇을 전화 예약 가변?나는 당신이 없을 변수를 선언"이라는 이"나"문서"하나.
한 MS 가 무한 변수는 없다고 생각의 중요한 문제이다.그들은 아마도 개선 컴파일러를 출력하는 경고를 하지만입니다.
제휴하지 않습니다 StackOverflow