2012-04-19 3 views
4

나는 페이스 북의 자바 스크립트의 일부를 읽고, 나는의 목적을 알아낼 수있는 흥미로운 기능을 통해 온했다 : 나는을 말할 수있는 지금까지이 기능은 Facebook의 JavaScript 소스에서 무엇을합니까?

function bagof(a) { 
    return function() { 
     return a; 
    }; 
} 

을 :

  • bagof을 매개 변수 a을 허용하는 함수입니다.
  • bagof은 즉시 익명의 함수를 반환합니다.
  • 그런 다음 반환 된 함수는 원래 매개 변수 a을 반환합니다.

내가 bagof의 사용이 같을 것이라고 가정합니다 :

newFunction = bagof("This is the data"); 
​console.log(newFunction());​ //Logs "This is the data"​​​​​​​​​​​​ 

점은 무엇입니까? a에 전달 된 변수 또는 함수를 직접 사용하거나 저장하지 않는 이유는 무엇입니까?

The source file에는 응용 프로그램에 많은 유틸리티 기능이있는 것처럼 보입니다.

답변

4

bagof() 메서드는 상수 함수 (항상 같은 값을 반환하는 함수)를 만드는 팩토리로 사용할 수 있습니다.

당신이 그런 맥락에서 사용하는 경우에도 : Math.random()가 (열심히) 한 번만 계산되기 때문에 randomFun()

var randomFun = bagof(Math.random()); 

호출은 항상 같은 값을 반환합니다. 일부 유틸리티가 메서드를 필요로 할 때 사용되는 유틸리티 메서드라고 생각합니다. 단순히 상수 값을 전달하려고합니다. 대신에 :

giveMeCallback(bagof(42)) 
+0

그래서, 함수가 정말 뭔가를 "할"하지 않지만, 쉽게 다른 기능을 만들기위한 속기의 역할 :

giveMeCallback(function() {return 42}) 

당신은 간단하게 말할 수 있습니까? –

+0

@MichaelJasper : 아니오, 부작용이없고 아무 것도 계산하지 않습니다. 그것의 유일한 목적은 함수를 만드는 것입니다. [factory method pattern] (http://en.wikipedia.org/wiki/Factory_method_pattern) –

관련 문제