2012-04-12 3 views
4

나중에 전역 변수 x를 통해 액세스하고 "모듈"처럼 작동하는 즉각적인 함수 안에 내 코드를 encapolate하려고합니다.즉각적인 함수 내에서 "this"를 사용하는 방법

코드 :

var x = (function() { 

    console.log(x); // undefined 
    console.log(this); // undefined 

})(); 

하지만 함수 자체를 참조 this를 사용하지 못할 이유가 이해가 안 돼요.

편집 :

즉각적인 기능 엄격 모드 ("use strict") 당신은 "이"함수 자체를 참조하는 데 사용할 수 없습니다

답변

1

함수가 함수 내에서 실행, 또는 strict mode

here's a demo 처리됩니다 다른 함수에 대한 콜백으로 넘겨 및

function foo(){ 
    'use strict'; 

    (function(){ 
     //undefined in strict mode 
     console.log('in foo, this is: '+this); 
    }()); 

} 

function bar(){ 

    (function(){ 
     //DOMWindow when NOT in strict mode 
     console.log('in bar, this is: '+this); 
    }()); 

} 

foo(); 
bar();​ 

때문에 콘솔을 볼 때 일어나는 재미있는 일이있다 해당 코드가 엄격 모드의 다른 함수 내에서 콜백으로 실행되는 경우 thiswindow을 참조하지 않고 undefined이됩니다.

+0

감사합니다.이 이상한 행동의 이유는 무엇입니까? –

+0

제가 제공 한 기사의 [이 섹션] (https://developer.mozilla.org/en/JavaScript/Strict_mode#.22Securing.22_JavaScript)에 설명되어 있습니다. a [similar answer] (http://stackoverflow.com/a/1335881/575527) 또한 이유를 설명했으며, 주로 함수 내의 코드가 전역 객체에 액세스하지 못하도록했습니다. – Joseph

0

에서 다른 함수 안에 있습니다. "this"는 객체 내부의 객체의 인스턴스를 가리 킵니다.

0

은 함수 소유자입니다. 함수 자체는 아닙니다.

및 방법에 의해

, 당신은보고 출력은 incorect입니다 :

immediate function의 소유자가 글로벌 객체이기 때문이다
console.log(this); // DOMWindow 

DEMO

- window.

설명대로 this은 항상 DOMWindow 개체 여야하지만, 여전히 undefined 일 수는 없습니다.

+0

모든 경우에 '이'가 '창'이 아닙니다. – Joseph

+0

@Joseph. 맞습니다 ** 모든 경우에'정의되지 않았습니다! '** ** – gdoron

0

자체 실행 기능 (즉치 기능)은 실행되는 동안 실행 컨텍스트 만 제공합니다. x는 코드에서 즉시 함수의 결과가 할당되고 아무 것도 반환하지 않으므로 x는 정의되지 않습니다. x는 정의되지 않습니다.

이것은 정의되지 않아야합니다. 즉, 익명 함수에서 DOMWindow 객체를 참조하므로 사용자가보고있는 정의되지 않은 함수는 익명 함수의 결과 일뿐입니다. 당신은 다음의 행동과 같은 "모듈"또는 클래스를 원하는 경우에 당신이 다음 프로토 타입 속성을 사용하여 상속 할 특성을 가진 개체를 확장 할 수 있습니다 생성자 x를 만들 것 같은

단지

var x = function() { 
console.log(x, this); 
}; 

할 것입니다.

x.prototype.foo = function() { 

} 
0

당신은 무의미 즉시 익명의 FUNC 내부 this을 사용할 수 없습니다. this은 나중에 생성 된 객체의 사용을 제안하고, 즉각적인 함수는 반대 목적을 가지고 있습니다. 즉, 실행 직후에 이름을 파기하는 것입니다. 예제에서 this은 전역 개체, 창을 나타냅니다.

관련 문제