MapReduce란 대용량의 데이터를 처리하기 위한 분산프로그래밍 모델로 타고난 병행성을 내포하고 있다.
function init() {
var name = "Mozilla"; // name은 init에 의해 생성된 지역 변수이다.
function displayName() { // displayName() 은 내부 함수이며, 클로저다.
alert(name); // 부모 함수에서 선언된 변수를 사용한다.
}
displayName();
}
init();
function makeAdder(x) {
var y = 1;
return function(z) {
y = 100;
return x + y + z;
};
}
var add5 = makeAdder(5);
var add10 = makeAdder(10);
//클로저에 x와 y의 환경이 저장됨
console.log(add5(2)); // 107 (x:5 + y:100 + z:2)
console.log(add10(2)); // 112 (x:10 + y:100 + z:2)
//함수 실행 시 클로저에 저장된 x, y값에 접근하여 값을 계산
위 코드를 보면 add5변수에는 makeAdder함수의 x값에 5가 할당된 체로 함수 사용이 가능하고
add10변수에는 makeAdder함수의 x값에 10이 할당된 체로 함수 사용이 가능하다
var greetDeeplyCurried = function(greeting) {
return function(separator) {
return function(emphasis) {
return function(name) {
console.log(greeting + separator + name + emphasis);
};
};
};
};
var greetAwkwardly = greetDeeplyCurried("Hello")("...")("?");
greetAwkwardly("Heidi")(); //"Hello...Heidi?"
greetAwkwardly("Eddie"); //"Hello...Eddie?"
위 코드에서 greetAwkwardly() 함수가 Currying함수 이다. Currying은 어떤 함수를 호출할 때 대부분의 매개 변수가 항상 비슷할 때 유용하게 쓸 수 있다.
//imperative
function double (arr) {
let results = [];
for (let i = 0; i < arr.length; i++){
results.push(arr[i] * 2)
}
return results
}
'어떻게'하는지를 알려주는 프로그래밍 방식이다.
function double (arr) {
return arr.map((item) => item * 2)
}
말 그대로 내가 원하는걸 '선언'하는 프로그래밍 방식이다.
함수 컴포지션(function composition)은 함수를 조합 한다는 뜻이다. 간단히 말하면 함수의 인자로 함수를 받는다고 보면 된다.