2012-08-28 2 views
3

IIFE를 사용하는 경우 로컬 범위를 참조합니까?'this'는 (는) IIFE 안에 있습니다. 로컬 범위와 동일합니까?

(function(){ 

    var $a; 
    $a = Su.$a 

    // this.$a = Su.$a; // can I replace with this 

})(); 

내 IIFE에서 도처에 Su.$a이 필요하므로 문의해야합니다.

그러나 Su.$a으로 전화하고 싶지는 않지만 $a으로 전화를 걸고 싶습니다.

this.$a과 동일하다고합니다. var $a var 최상위 범위는 무엇입니까?

답변

5

아니요, 이들은 다릅니다.

var $a이면 $a은 기능 범위에서 지역 변수입니다.

이 자체 실행 기능입니다 때문에, this.$a를 사용하는 경우에, this이 경우 window이다는 this.$awindow.$a와 동일합니다, 그래서 당신은 대신에 전역 변수 $a을 사용하고 있습니다.

+1

이것에 대해서는 결코 생각하지 못했지만, 이것은 "메커니즘"이라고 불리는 것을 이상하게 여깁니다 ... 고전적인 OO에서와 같이 이것은 현재 개체를 가리 킵니다 ... 명암을 비교하면 매우 혼란 스럽습니다. –

5

thisMDN/this Operator 설명 몇가지 의해 설정되지만 짧은된다

  • 최상위 범위
  • obj에서 전역 객체 obj.func(...)
  • 을 수행
  • objfunc.apply(obj, [...]) 또는 func.call(obj, ...)
    또는 t 그는 전역 객체, objnull 또는 undefined
  • 경우 프로토 타입 func.prototype와 새로운 객체 elem.addEventListener('event', func, ...)event는 몇 가지 차이점 및 추가가있다 elem

에 해고되는 경우, new func(...)

  • 이벤트 대상을 호출 새로운 자바 스크립트에서,하지만 그것은 꽤 많이 있습니다. thisfunction 범위와 관련이 없습니다.

  • +0

    로컬 범위를 참조 할 수있는 방법이 없습니까? 아니면 로컬 범위에 있기 때문에 중복 될 수 있습니까? 그냥 일관성을 위해서 생각할 수 있습니다. –

    +0

    @HiroProtagonist 아니요, 없습니다. 당신은 반대를 할 수 있습니다 -'with (obj)'는 스코프 체인에 그것을 추가 할 것입니다 - 그러나 그것은 매우 불쾌합니다. – ephemient

    +0

    PHP는 현재 객체와 클래스를 각각 참조하는 this와 self를 가지고 있지만 equiv는 없습니다. 나는 js에서 추측한다. –