본문 바로가기

Dev.FrontEnd/JavaScript

[세번째] JavaScript - Basic / 함수형 프로그래밍 언어




<요즘 함수형 프로그래밍 언어가 각광을 받고 있으면서 자바스크립트의 함수형 특징이 다시 한 번 주목받고 있는 분위기다. 예를 들면 클로저...>

함수형 프로그래밍 언어로서의 JavaScript

유효범위

콜백

클로저

arguments

호출


<1> 유효범위
var를 함수 안에서 사용하면 지역변수가 되고
함수 밖에서 사용하면 전역변수가 된다.
전역변수는 왠만해서는 쓰지 않는 것이 원칙이다.
자신이 변수로 지정한 것이 나중에 다른 용도로 쓰일 수도 있기 때문에 전역에다가 변수를 지정해두는 것은
추후 작업에 막대한 영향을 끼치게 되는 것이다.

자바스크립트에서는 함수 안에서만 선언된 var 변수가 지역변수가 된다.
다른 언어에서는 for , if 등의 구문 안에서 선언된 var 변수도 지역변수가 된다.



<2> 콜백.
메소드란 객체의 속성 값으로 담겨진 함수를 의미한다.
함수는 값이기 때문에 다른 함수의 인자로 전달 될수도 있다.
그리고 함수의 리턴값으로 함수를 사용할 수 있다.
당연히 배열의 값으로도 사용할 수 있다.

ex1)
function cal(mode){
    var funcs = {
        'plus' : function(left, right){return left + right},
        'minus' : function(left, right){return left - right}
    }
    return funcs[mode];
}
alert(cal('plus')(2,1));
alert(cal('minus')(2,1));   
파악하기 연습;;


ex2)
var process = [
    function(input){ return input + 10;},
    function(input){ return input * input;},
    function(input){ return input / 2;}
];
var input = 1;
for(var i = 0; i < process.length; i++){
    input = process[i](input);
}
alert(input);
파악하기 연습;;


비동기적 처리 -> 오래 걸리는 작업을 예약 형식으로 해서 다음 문제를 해결하는데 있어서 사용자가 사용하게 되는 시간을 줄이게 되는 방식
asynchronous Javascript and XML = Ajax
XML의 의미는 크게 없다.
요즘에는 다른 언어들도 다 비동기적 처리 방식을 이용한다.
GET방식과 POST 방식이 있다.

나중에 jQuery 포스팅 때 자세히 공부해서 올리겠다.



<3> 클로저
클로저란 내부함수가 외부함수의 맥락에 접근할 수 있는 것(매커니즘)을 말한다.
내부함수는 외부함수의 지역변수에 접근 할 수 있는데
외부함수의 실행이 끝나서 외부함수가 소멸된 이후에도
내부함수가 외부함수의 변수에 접근할 수 있다.
클로저란 이러한 매커니즘을 의미한다.
즉, 클로저란 내부함수가 외부함수의 지역변수에 접근할 수 있고,
외부함수는 외부함수의 지역변수를 사용하는 내부함수가 소멸될 때까지 소멸되지 않는 특성을 의미한다.

- 클로저는 객체의 메소드에서도 사용할 수 있다.
- 동일한 외부함수 안에서 만들어진 내부함수나 메소드는 외부함수의 지역변수를 공유한다.

Private 속성은 객체의 외부에서는 접근 할 수 없는 외부에 감춰진 속성이나 메소드를 의미한다.
이를 통해서 객체의 내부에서만 사용해야 하는 값이 노출됨으로서 생길 수 있는 오류를 줄일 수 있다.




<4> arguments
함수에는 arguments 라는 변수에 담긴 유사배열이 존재한다.
이 유사배열에는 함수를 호출할 때 입력한 인자가 담겨있다.

함수명.length = 그 함수가 매개변수(parameter)로 정의한 매개변수의 개수가 출력.
func(a,b) 이라면 출력되는 값은 2
arguments.length = 실제로 함수가 전달받은 인자의 개수를 출력.



<5> 호출

일반적인 개체지향 언어에서는 하나의 객체에 소속된 함수는 그 객체의 소유물이 된다.
하지만 자바스크립트에서는 함수는 독립적인 객체로서 존재하고,
apply 나 call 메소드를 통해서 다른 객체의 소유물인 것처럼 실행할 수 있다.

.apply
.call
두 가지는 비슷한것 같지만 차이가 있다.고 말씀하셨다.

상세한 내용은 다음에 추가할 수 있도록...



두번째 자바스크립트 끝//

(생활코딩 이고잉님 감사합니다^^)

-..-