2012-07-29 3 views
1
function get_denomination(){ 
    return "Fabrice Petard"; 
} 

function auto_flatterie(flatterie){ // 
    return this.get_denomination() + " est " + flatterie + " !"; 
} 

console.debug(auto_flatterie("le plus intelligent")); // affiche "Fabrice Petard est le plus intelligent !" 

"this"가 무엇에 바인딩되어 있는지, 왜 this.get_denomination이 오류를 발생시키지 않는지 설명 할 수 있습니까?왜이 이상한 자바 스크립트 코드가 작동하는지 설명하십시오.

+2

https://developer.mozilla.org/en/JavaScript/Reference/Operators/this를 읽으십시오. –

+0

이것은 또한 http://www.robertsosinski.com/2009/04/28/binding-scope-in-javascript/에 도움이 될 수 있습니다. 설명하는 사례에 대해 논의하고 있습니다. – Adi

+2

아마도 자바 스크립트를 [ 'strict mode'] (https://developer.mozilla.org/en/JavaScript/Strict_mode), [이 코드는 실제로 오류를 던질 것입니다] (http://jsfiddle.net/mYecU/). Strict 모드는 암시 적 전역과 같은 다른 가난한 언어 결정으로부터 사용자를 보호합니다. – Esailija

답변

3

게시 한 코드에서 this은 (는) window 개체입니다. 기본 전역 범위 (예 : get_denomination)에서 함수를 만들면 window 개체에 속성으로 연결됩니다.

+0

함수가 전역 인 경우에만이 경우 인 것처럼 보입니다. –

+2

나는'this'를 의미하는 것이 아니 었습니다. * "당신이 함수를 만들 때 (...)"window 객체 "*에 붙을 수 있습니다. * 어떤 * function이든지 같이 이해할 수 있습니다. true가 아닌 전역 객체의 속성. 경험이 부족한 개발자는이 점을 혼동 스러울 수 있습니다. –

+0

@FelixKling Point 찍은. – Dennis

3

thiswindow 개체에 바인딩됩니다. 메서드 get_denominationwindow 개체에 등록됩니다.

+0

이 경우에는 글로벌 인 경우 만. –

+1

예, 범위 지정에 대한 더 큰 논의가 더 자세한 답변이 될 것이라고 생각하지만, 현재의 동작 만 설명하려고했습니다. – Candide

관련 문제