2014-02-12 6 views
0

스크립트에서이 내용을 한 번 읽었지만 그 이점을 이해하지 못했습니다.어떤 신체가이 패턴을 사용합니까?

(function() {}).call(this); 

또한, 나는,

(function() { console.log('Hello World') }).call(this); 

그것을 실행 시도했지만 아무것도 인쇄되지 않았다.

심지어 (function() { console.log('Hello World') })()을 호출해도 아무 것도 인쇄되지 않았습니다. 뭐가 문제 야?

+0

실행하면 Hello World가 출력 될 것이고, 그냥 방화 켓 콘솔에서 실행 해 보겠습니다. – Tarek

+0

콘솔에서 실행했는데 아무 것도 인쇄되지 않았습니다. –

+0

나를 위해 인쇄합니다. – Ford

답변

0

아마도 작가는 IIFE의 컨텍스트를 변경하려고합니다. this을 전달하면 call이 없어도 window을 참조하므로 의미가 없습니다. 여러분이이처럼 그것을 할 수 있기 때문에 나는 아직도, 지점이 표시되지 않는, 그러나

(function() { console.log('Hello World', this) }).call({foo:1}); 

:이 같은

뭔가 범위에 this의 의미를 바꿀 것

(function (fooObj) { console.log('Hello World', fooObj) })({foo:1}); 

제가 말하고자하는 것이 더 일반적입니다. 나는 내 코드 중 하나를 브라우저 창에서 작업 할 때

+0

지구 환경에서 실행되었다고 가정하고 있습니다. –

+0

@cookiemonster 글쎄, OP에서 더 나은 설명없이, 사람은 그게 사실이라고 가정 할 수있다 – Johan

+0

왜? 그러한 가정을 할 필요가 없습니다. 대답의 두 번째 부분에 관해서는, JS가 어휘 적으로 정의 된 'this'를 갖는 새로운 함수 구문을 얻고 있으며, 이는이 '값'을 잠재적으로 중요하게 만들 것이라고 생각하십시오. –

2

내가 this 사용 (이 경우 thiswindow을 의미) 또는web worker (이 경우 this는 작업자 인스턴스를 참조).

물론 .call(this)은 잘 작동하지만 물론 다르게 적용 할 수도 있습니다. 예를 들어 다음과 같이 입력해도됩니다.

(function(root) { 

    root.MyLibrary = MyLibrary; 

}(this)); 

항상 그렇듯이 속담 고양이를 피하는 방법은 여러 가지가 있습니다.

+0

''webworker''에서'self'를 참조 할 것입니다, 그렇지 않습니까? – Xotic750

+0

@ Xotic750 웹 작업자에서의 나의 경험에서'self'와'this'는 같은 (worker) 객체를 참조합니다. 솔직히 말해서 나는 왜 그들이'self'를 도입했는지 확신 할 수 없다 ... –

+0

''엄격한 "; : / – Xotic750

관련 문제