2017-02-09 2 views
0

사람이 여기에 무슨 일이 일어나고 있는지 설명 할 수 연산 식 : - 당신이 IE8이를 실행하는 경우 -라는 이름의 기능을 자바 스크립트 범위 지정 불확실성 IE8은

(function() { 
    this.bob = function bob() {}; 

    window.alert(typeof(bob) + ', ' + typeof(this.bob) + ', ' + (bob == this.bob)); 
})(); 

출력입니다 :

function, function, false

다른 브라우저 것 give :

function, function, true - 예상대로!

나는 스코어링을 IE8에서 다르게 수집 할 수 있었다. 즉, 전역 - - this 창 때문에 다른 브라우저

, bobthis.bob는 마지막 행에서 동일한 참조하고 bob 전역 변수를 의미한다.

IE8에서는 - bobfunction bob에 정의 된 바와 같이 로컬 참조입니다.

비록이 경우에도 확실히 두 참조 모두 동일한 function 개체를 참조하므로 bob == this.bob은 여전히 ​​true를 반환해야합니까 ??

누구든지 IE8에 대해 충분히 이해하고 있습니까?

+1

아니요, IE8은 글로벌 '밥'도 만듭니다. 다른 브라우저는 함수에서 this.bob과 bob을 같은 참조로 취급하고 있습니다. http://kangax.github.io/nfe/ – Teemu

+0

그게 설명해 - thanks @ Teemu! 답변을 게시하고 올바르게 표시하겠습니다.하지만 평판이 필요하지는 않습니까?! :-) –

+0

기다려! 뭔가 잘못되었습니다. (https://jsfiddle.net/zg512xjf/) ... – Teemu

답변

0

그래서, 내 자신의 질문에 대답 - link @Teemu에 따라 제공 :

나는 this도 전역 범위 인 창을 의미한다, 그래서 this.bob 글로벌을 생성 질문에서 설명하고있는 바와 같이 bob 변수 - 지금까지 너무 좋아!

대부분의 브라우저에서 this.bobbob은 의미 상 동일합니다. 동일한 기능 인스턴스에 대한 동일한 전역 참조를 나타냅니다. 로컬 주소는 bob입니다. 되고 -

this.bob = function bob() {}; 

제 특질 로컬 영역으로 기능 '누설'이름이라고 :

IE8 비록 주위라는 함수식은,이 코드 라인에서 사용되는 두 개의 특정 단점을 갖는다 새로운 로컬 변수 따라서 다음 코드 행의 bob은 더 이상 글로벌 bob 변수를 나타내지 않습니다. 대신 이제 로컬 대신 bob 로컬 변수를 나타냅니다.

두 번째 단점은 IE8에서 위와 같이 변수에 명명 된 함수 표현식을 할당하면 IE8 이 실제로 2 개의 함수 인스턴스를 생성한다는 것입니다.이므로 this.bob이 아니며은 로컬 bob의 인스턴스와 같습니다.