2011-12-27 2 views
11

누군가 설명 할 수 있습니까? 인해 IE 버그 IE8IE8`window.fn! == fn`

(function(){ 
    window.foo = function foo(){}; 
    console.log(window.foo === foo); // false 
}()); 
+0

아주 좋은 읽기 : http://kangax.github.com/nfe/ – InfinitiesLoop

답변

13

는 지정된 함수식 함수의 별도 카피를 갖춘 별도 foo 로컬 변수를 생성한다.

More info

: 가지 흥미로운지고 곳

var f = function g(){}; 
f === g; // false 

이입니다. 또는 오히려 - 완전히 너트. 여기서 우리는 두 개의 별개의 객체를 다뤄야하는 위험성을 보았습니다 - 그것들 중 하나를 보완하면 분명히 다른 객체를 수정하지 않습니다; 이것은 메커니즘을 캐싱하고 f의 속성에 무언가를 저장하기로 결정한 다음 g의 속성으로 액세스하려고 시도했을 때 작업하는 객체와 동일하다고 생각하면 상당히 번거로울 수 있습니다.

+0

최고, 감사합니다. 나는 그걸 전에 읽었지만 지금까지 한번도 그것을 치지 않았다. –

+2

다시 한번, 자바 스크립트는 엉망입니다. –

1

문제를 해결하는 데 관심이 있다면 문제가 해결됩니다. 당신이 거기에있어 무엇인가 '라는 이름의 함수 표현식'에

(function(){ 
    var f = function foo(){}; 
    window.foo = f; 
    alert(window.foo === f); // false 
}()); 
+4

또는 이름을 제거하십시오. – SLaks