2014-01-24 8 views
7

나는 gmails javascript (확장 기능 작성)를 겪어 왔으며 곳곳에 (0, _.ab)(a) 또는 변형을 보았습니다. 이것은 무엇을 성취합니까?무엇을 의미합니까 (0, somefunc) (args)

나는 그들이 단지 직접 a(1,2,3) 전화하지 왜 내가 해결할 수없는 그러나 이러한

function a(a,b,c){ console.dir(a+b+c); } 
(0, a)(1,2,3) 

같은 몇 가지 테스트를 시도했습니다. (0,a)을 사용하여 전화를 걸 때 이상한 이점이 있습니까?

나는이를 테스트하기 위해 jsperf (http://jsperf.com/direct-vs-0-func-calls)를 만들었으며 a(1)(0,a)(1)은 동일하게 보입니다.

편집 : 지금까지 내가 밖으로 만들 수있는 구글에만 직접 함수와 같은 if ((0, _.wa)(a)) (Gmail의 소스에서 가져온)

+5

나는 그것이 minifier 또는 transpiler의 부산물이다 생각한다. – Pointy

+1

그게 내 생각 이었지만, 왜 그렇게하는거야? –

+0

@Pointy Closure Compiler (많은 Google 제품에서 사용됨)는 코드를 완전히 제거합니다. – Tibos

답변

11

(0, func)() 구문은 보장을 호출 할 필요가 어디를 사용하는 컨텍스트 (this) func은 전역 컨텍스트입니다. 예를 들어

:

var myContext = { 
    func: function() { 
     console.log(this); 
    } 
}; 

myContext.func();  // => myContext 
(0, myContext.func)(); // => window 
+0

흥미 롭습니다. 이것에 대한 문서가 어딘가 있습니까? – Cerbrus

+0

아, 전역 객체에 액세스하기위한 범위 체인을 제거 하시겠습니까? 영리한. –

+0

... "쉼표 연산자"입니다. 나는 항상 그 또한 통신 수다는 것을 잊는다. – Cerbrus

관련 문제