함수

|

######################## 함수(function) ########################
하나의 로직을 재실행 할 수 있도록 해, 코드의 재사용성 / 유지보수의 효율 / 가독성을 높여준다.

function 함수명( [인자...[,인자]] ){
   코드
   return 반환값
}


######################## 반복문과 함수의 차이 ########################
반복문은 일정한 반복을 '그 자리' 에서 실행할 때 의미가 있고,
함수는 일정한 반복을 '여러곳' 에서 실행할 때 의미가 있다.

######################## 함수의 출력 ########################
함수안에서 제일 먼저 나오는 return을 보면, 값을 출력하고 함수를 빠져나간다.

######################## 매개변수와 인자(parameter & argument) ########################
함수정의 function good ( a, b ) { ~ }
함수불러오기 good(1, 2);
위의 함수불러오는 코드에서, 괄호안에 들어가는 1과 2는 인자(argument)
그 인자가 들어가는 a와 b는 매개변수(parameter)라고 한다.

- 여러개의 매개변수를 지정할 수 있다(매개변수가 많으면 인자도 많아 지겠죠?).

- 함수를 정의하는 방법은 여러가지가 있다.

 

######################## 유효범위 ########################
전역변수/지역변수 : 함수 바깥에서 선언된 변수(전역적으로 영향을 미침)/함수 내에서 선언된 변수(함수 내에서만

영향을 미침)
- 전역변수는 거의 쓰이지 않음(프로그램이 커질수록 변수의 이름이 서로 헷갈릴 수 있기 때문. 이런 개념도 그러
한 문제때문에 고안된 것)
- 함수 밖에서 var를 쓰면 전역변수, 함수 안에서 var를 쓰면 지역변수
- 전역변수를 딱 하나만 쓰려면 전역변수 하나를 객체로 만들고 그 소속 아래 나머지 변수를 선언한다.
- 전역변수를 쓰지 않으려면 만든 로직을 익명함수화한다(모듈화의 기초)
- 자바스크립트의 지역변수는 {}가 아니라 함수!에서만 유효하다.
- 자바스크립트는 정적 유효범위를 채택한다(함수 호출시점이 아니라 선언 시점을 기준으로 한다)

var i = 5;
 
function a(){
    var i = 10;
    b();
}
 
function b(){
    document.write(i);
}
 
a(); // 실행결과는 5이다.(사용될때가 아니라 정의될때가 기준임!)

######################## 값으로서의 함수 ########################

 JavaScript의 함수가 다른 언어의 함수와 다른 점은 함수가 값이 될 수 있다는 점이다. 

function a(){} // 함수 a는 변수 a에 담겨진 값이다. 

a = {
    b:function(){
    }
}; // 또한 함수는 객체의 값으로 포함될 수 있다.
// 이렇게 객체의 속성 값으로 담겨진 함수를 메소드(method)라고 부른다.

function cal(mode){
    var funcs = {
        'plus' : function(left, right){return left + right},
        'minus' : function(left, right){return left - right}
    }
    return funcs[mode];
}
// 함수는 함수의 리턴 값으로도 사용할 수 있다.

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);
}// 당연히 배열의 값으로도 사용할 수 있다.

######################## 콜백 ########################

콜백 : 어떠한 함수가 수신하는 인자가 함수인 경우. 함수가 다른 함수의 인자로 사용됨으로써 그 함수의 내용을 완전히 바꿀 수 있는것.

비동기(Asynchronous) - 요청에 처리 완료와 관계없이 응답한다. 이후 운영체제에서 응답할 준비가 되면 응답한다.

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

function sortNumber(a,b){
    // 위의 예제와 비교해서 a와 b의 순서를 바꾸면 정렬순서가 반대가 된다.
    return b-a;
}
numbers.sort(sortNumber); // array, [20,10,9,8,7,6,5,4,3,2,1]

function sortfunc(a,b){
    if(a>b){
    	return 1;
    } else if(a<b){
    	return -1;
    } else { 
    	return 0;
}
numbers.sort(sortfunc); // array, [1,2,3,4,5,6,7,8,9,10,20]

콜백은 비동기처리에서도 유용하게 사용된다. 시간이 오래걸리는 작업이 있을 때 이 작업이 완료된 후에 처리해야 할 일을 콜백으로 지정하면 해당 작업이 끝났을 때 미리 등록한 작업을 실행하도록 할 수 있다. 다음 코드는 일반적인 환경에서는 작동하지 않고 서버 환경에서만 동작한다. 동영상을 참고한다.

// 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>

비동기적인 처리 => 인터페이스와 사용자가 소통할 범위와 시간을 늘리기위해 시간이 많이 걸리는 작업을 뒤로 미루는 처리
순차적 절차적으로 코드를 일직선으로 쭉 실행하는것을 동기적인 처리, 우선도에 따라 다르게 처리하는것을 비동기적인 처리라고 부름.

'JavaScript' 카테고리의 다른 글

jQuery - input 쓰기, 읽기, 활성화, 비활성화 - readonly, disabled  (0) 2019.08.30
배열  (0) 2019.08.13
반복문  (0) 2019.07.25
비교와 조건문  (0) 2019.07.23
변수, 주석, 줄바꿈과 여백  (0) 2019.07.23
And