function outter(){
var title = 'coding everybody';
return function(){
alert(title);
}
}
let inner = outter();
inner();
function factory_movie(title){
return {
get_title : function (){
return title;
},
set_title : function(_title){
title = _title
}
}
}
ghost = factory_movie('Ghost in the shell');
matrix = factory_movie('Matrix');
alert(ghost.get_title()); // Ghost in the shell
alert(matrix.get_title()); // Matrix
ghost.set_title('공각기동대');
alert(ghost.get_title()); // 공각기동대
alert(matrix.get_title()); // Matrix
method(내부함수로 이해한다.) 2개가 있는 객체를 return 하고 있다.
참조!
title은 내부 함수의 지역 변수로 사용한다.
private 변수가 가능하다.
필요한 이유?
closure 예제를 통해 빈번히 일어나는 실수를 알아보자.
var arr = []
for(var i = 0; i < 5; i++){
arr[i] = function(){
return i;
}
}
for(var index in arr) {
console.log(arr[index]());
}
var arr = []
for(var i = 0; i < 5; i++){
arr[i] = function(id) {
return function(){
return id;
}
}(i);
}
for(var index in arr) {
console.log(arr[index]());
}
위 두 특징을 예시코드를 보며 이해한다.
Math.random()
함수는 호출할 때 마다 다른 출력 값을 만들어낸다. 즉 순수하지 않다.
const highpass = (cutoff, value) => value >= cutoff;
이 함수는 외부의 값 변화에 상관없이 항상 동일하게 출력한다. 두 인자를 받아 boolean 형식의 값을 반환한다. 순수 함수이다.
Object Oriented Programming의 약자로써 class와 object에 기반한 프로그래밍 패러다임(디자인 패턴) 이다. 관련된 데이터끼리 묶어서 class를 형성하고 그 안에서 object instance를 만듬으로써 프로그램을 디자인한다.
side effect가 없는 pure function을 구현함으로써 프로그램을 디자인한다. 여러개의 작은 function을 엮으며 하나의 큰 function을 구현하고 불변성을 지키게 됨.