TIL 231025 (함수기초, for문)

두두맨·2023년 10월 25일
1

함수란?

input과 output을 가진 것을 말한다.
쉽게 고양이를 생각하면 된다.
쓰다듬고 만졌을 때, 야옹 또는 골골송을 들려주는 고양이가 곧 함수다.

고양이 = 함수

다시 말해 쓰다듬는 행위, 즉 input이 있을 때
야옹 또는 골골송, output이 있는 것을 함수라고 한다. input과 output을 가진 것이 함수다.
기억 안나면 고양이를 떠올리면 될 것 같다.

input 투입 시 output을 반환하는 기능을 만드는 것이 함수다.
왜 계속 똑같은 이야기를 반복하냐면, 함수를 왜 만드는지 알아야 앞으로 만날 함수들을 이해하기 쉽다고 판단했기 때문이다.

함수도 변수다.

고로 함수도 변수 안에 담을 수 있다. 함수를 변수에 담는 것이 뭘까?

var a= funciton (a,b){
		return a + b };
	

바로 이거다.단순히 '=' 할당연산자로 a라는 변수에 함수를 할당해준다는 것이다.
그렇게 되면 console.log(a(1,2)); 와 같이 간편하게 사용 가능하다.
(추가로 함수에는 input, output이 생략될 수도 있다.)

var f1 = function (a) {
            return 3;}

여기에

f1(); 

이렇게 쓰면 함수를 잘못 사용한 것이다.

반드시 인자를 넣어줘야 한다. 인자 = 파라미터(parameter)

예제)

  1. 인자를 3개 받아서, 모든 값을 더해서 출력하는 함수
var func01 = function (a, b, c) {
  return a + b + c;
};
  1. 인자를 2개 받아서 모든 값을 곱해서 출력하는 함수
var func02 = function (a, b) {
  return a * b;
};
  1. 인자를 4개 받아서 console.log에 합을 출력하고 아웃풋은 없는 함수
var func03 = function (a, b, c, d) {
  console.log(a + b + c + d);
};

아무 것도 리턴하지 않기 때문에,
괄호 밖에서 console.log(func03(1,1,1,1));
해봐도 undefined가 된다.

화살표 함수

var func01 = function (a, b) {
  return a + b};

여기서 함수명을 생략하고 인자와 리턴을 화살표로 연결하여 간편하게 사용할 수도 있다.
ES6부터 새로 생긴 문법이다.
return 생략 시 반드시 중괄호를 없애주어야 한다!

var func02 = (a, b) => a + b;

for문 예시

const arr = [1,2,3,4,5];

for(let i = 0; i < arr.length; i++){
	}

배열을 변수에 할당하고, for문을 사용해보았다.
우선 i= 0 이라고 할당하고 시작한다.
대체로 컴퓨터는 0부터 세고, 첫번째 위치한 값이 인덱스[0]이기 때문에 처음부터 배열을 훑는다는 의미에서 i=0으로 할당한다.

그다음 i < arr.length는 뭐냐면,
arr 배열의 길이보다 i값이 작을 때까지만 진행하겠다는 뜻이다.
arr 배열 길이가 5이니까 i값이 5가 되면 종료하겠다는 것!(5를 마지막으로 출력하고 사이클 또 돌리지 않겠다는 뜻임.)
마지막 i++ 은 i= i + 1과 같은 의미를 가지고 있다. 앞의 조건이 충족되어 한 사이클이 돌 때마다 다음 값부터 1씩 증가한다는 의미다.

괄호 안의 내용을 한 번에 정리하면,
현재 i는 0이고, 5보다 작을 때까지, 계속 사이클을 돌린다.

0 -> 조건 충족 -> 출력 (한 사이클 끝났으니 + 1 해줌)
1 -> 조건 충족 -> 출력 (한 사이클 끝났으니 + 1 해줌)
2 -> 조건 충족 -> 출력 (한 사이클 끝났으니 + 1 해줌)
3 -> 조건 충족 -> 출력 (한 사이클 끝났으니 + 1 해줌)
4 -> 조건 충족 -> 출력 (한 사이클 끝났으니 + 1 해줌)
5 -> 조건 충족 X -> 종료

i가 5가 되었을 때, i< arr.length 조건을 충족하지 못하기 때문에 그대로 결과도 반환되지 않는게 아니고, 값이 반환은 되지만 다음 사이클로 넘어가지 않고 결과만 도출하고 그대로 종료된다는 의미로 받아들이면 좋을 것 같다. 더 쉽게 생각할 수 있는 방법은, 사이클 진입 시 arr.length와 비교하여 값이 작으면 사이클 종료 후 +1된 값으로 반환되어 다음 사이클로 진입할 수 있는데, i가 5로 반환된 경우, 사이클로 진입하여도 i < arr.length 조건을 충족하지 못하기 때문에, 더이상 진행되지 않고 마지막으로 반환된 5를 끝으로 for문이 종료된다고 이해하면 될 것 같다.

비슷한 느낌 예시

const arr = [1, 2, 3, 4, 5, 6, 7];

for (let a = 0; a < 5; a = 6) {
console.log(a)}

어떤 결과가 나올까?

답은 0 하나만 나온다.
괄호 안을 세 부분으로 나눠보면, 0부터 시작되어 a < 5 조건을 충족했기 때문에 그대로 0으로 출력된다. 그리고 한 사이클이 끝났기 때문에 a = 6으로 다음 사이클이 시작되고 조건 미충족으로 값은 반환되지 않고 종료되는 것이다. 고로 반환되는 값은 0 하나만 있는 것이다.

profile
병아리 개발준비생 🐥

0개의 댓글