본문으로 바로가기

1.함수의 용도-1 

JavaScript에서는 함수도 객체다. 다시 말해서 일종의 값이다. 거의 모든 언어가 함수를 가지고 있다. JavaScript의 함수가 다른 언어의 함수와 다른 점은 함수가 값이 될 수 있다는 점이다.

 값이라는 것은 어떠한 변수 var a='sss' sss는 a의 값이된다 그럼  함수가 일종의 값이라면 어떠한 변수에 담을수 있는 속성을 겆고있다고 할 수있다 


function a(){}//함수를 정의했다 //a이라고하는 자바스크립트의 변수에 담겨진 일종의 값이라는 것


var a = function (){}//이것도 a에 함수를 담은 것 이렇게 될 수 있는 이유는 값이기 때문에


위의 예제에서 함수 a는 변수 a에 담겨진 값이다. 또한 함수는 객체의 값으로 포함될 수 있다. 이렇게 객체의 속성 값으로 담겨진 함수를 메소드(method)라고 부른다.


var a = {  //객체안에서 b라고 하는 것은 값을 저장하는 그릇과같은  역할 을 하고 있다 

    b:function(){//b라고하는 키 //값은 function(){}

//b 변수와 같은 역할을 하고 있다. 어떠한 값을 저장하고 있기때문에 (key=변수와 같은 역할을 한다(속성,property) )

//함수(메소드)는 값이고 함수는 객체안에 저장 될 수 있다 

    }

};


함수는 값이기 때문에 다른 함수의 인자로 전달 될수도 있다. 


function cal(func, num){

    return func(num)

}

function increase(num){

    return num+1

}

function decrease(num){

    return num-1

}

alert(cal(increase, 1));

alert(cal(decrease, 1));


10행을 실행하면 함수 increase와 값 1이 함수 cal의 인자로 전달된다. 함수 cal은 첫번째 인자로 전달된 increase를 실행하는데 이 때 두번째 인자의 값이 1을 인자로 전달한다.

 함수 increase은 계산된 결과를 리턴하고 cal은 다시 그 값을 리턴한다.


2.값으로서의 함수와 콜백-함수의 용도2

함수는 함수의 리턴 값으로도 사용할 수 있다.


함수는 변수에 저장 될 수 있고 그렇기 때문애 자연스럽게 객체에 저장될 수 있는데 객체에 저장되어있는 함수를 메소드라고 달리 부른다  함수는 인자로더 전달되고 리턴값으로도 사용이된다 


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)); 


  


당연히 배열의 값으로도 사용할 수 있다.


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);

콜백

3.값으로서의 함수와 콜백-콜백이란?

처리의 위임

값으로 사용될 수 있는 특성을 이용하면 함수의 인자로 함수로 전달할 수 있다. 값으로 전달된 함수는 호출될 수 있기 때문에 이를 이용하면 함수의 동작을 완전히 바꿀 수 있다. 

인자로 전달된 함수 sortNumber의 구현에 따라서 sort의 동작방법이 완전히 바뀌게 된다.

function sortNumber(a,b){

    // 위의 예제와 비교해서 a와 b의 순서를 바꾸면 정렬순서가 반대가 된다.

    return b-a;

}

var numbers = [20, 10, 9,8,7,6,5,4,3,2,1];

alert(numbers.sort(sortNumber)); // array, [20,10,9,8,7,6,5,4,3,2,1]


비동기 처리


4.비동기 콜백과 Ajax

콜백은 비동기처리에서도 유용하게 사용된다. 시간이 오래걸리는 작업이 있을 때 이 작업이 완료된 후에 

처리해야 할 일을 콜백으로 지정하면 해당 작업이 끝났을 때 미리 등록한 작업을 실행하도록 할 수 있다.

 다음 코드는 일반적인 환경에서는 작동하지 않고 서버 환경에서만 동작한다. 동영상을 참고한다.


datasource.json.js


{"title":"JavaScript","author":"egoing"}


demo1.html


<!DOCTYPE html>

<html>

<head>

<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>

</head>

<body>

<script type="text/javascript">

    $.get('./datasource.json.js', function(result){

        console.log(result);

    }, 'json');

</script>

</body>

</html>