2013-05-07 3 views
0

아래 코드 조각에는 왜 window.foo가 있지만 this.bar는 정의되지 않았습니까?JavaScript 개체 컨텍스트 및 함수

function foo() { 
    function bar() { }; 
    console.log(this.bar); 
} 

console.log(window.foo); 
foo.call({}); 
+1

JavaScript에서 this는 변수 범위와 아무 관련이 없기 때문에. 함수가 호출되는 방식에 따라 동적 값이 설정됩니다. 예외는 전역 환경이며,'this'는 전역 변수를 저장하는 전역'window' 객체를 참조합니다. –

+0

'this'는'window'가 될'global' 객체의'bar' 메소드 나 객체를 찾고 있습니다. 'bar'는'global' 객체에서 정의되지 않았습니다. – Sethen

+0

내게 가장 혼란스러운 것은 window.foo가 존재한다는 것입니다. 왜 글로벌 스코프에서 그런 일이 일어나지 만 각 하위 범위에서는 그렇지 않습니까? –

답변

-1

브라우저에서 창은 글로벌 개체이므로 섀도우가 아닌 한 모든 곳에서 사용할 수 있습니다. this은 메서드로 불리는 함수 본문에서 유용한 것을 가리키고 있습니다. foo.bar() - bar, thisfoo 인 경우 또는 bar.call (...) 또는 bar.apply (...)가 호출되어 this에 대한 인수가 있거나 함수 외부에있을 때 전역 개체 (창)를 가리키는 곳에서 모두 호출하십시오.

명시 적으로 foo.call ({})을 수행하여이 객체를 빈 Object로 설정합니다. 따라서 this.bar는 호출 중에 존재하지 않습니다.