2020.01.22 Function
함수는 총 3가지 특징이 있다.
첫번째는 함수의 이름을 적지 않아도 실행이 된다는 것이다.
두번째는 리턴값으로 사용할수 있다는 것이다.
세번재는 파라미터라는 값을 받을수 있다는 것이다.
다음은 함수의 호이스팅이라는 특징에 대해서 말을 하려고 한다.
사진을 보면 분명 함수는 첫번째 행이 아닌 두번째 행부터 실행이 되는데 어떻게 첫번째 행에서 함수가 실행되지?
라고 생각하는 사람들이 있을것이다.
이건 함수의 선언문일경우 즉, 위의 방식처럼 함수를 선언한다면 자바스크립트의 선언문에 대한 호이스팅이 일어나기 때문이다. 호이스팅이란 제일 위의 스코프에서 실행되는 효과를 볼수있는 기능을 말한다.
이유는 없다. 그냥 자바스크립트 언어 자체가 그렇게 만들어져있기때문이다.
자바스크립트의 모든 선언은 전부 호이스팅 된다. 그 중에는 함수도 포함되어있다.
그래서 함수를 위에서 호출하고 아래에서 정의해도 실행이 된다.
함수 호이스팅은 코드의 가독성을 해치기 때문에 되도록이면 사용하지 않는것이 좋다.
다른 사람이 자신의 코드를 읽었을때
'아.. 코드 읽기 진짜 힘드네. 왜 이렇게 어렵게 짜는거야.' 라는 혹평을 듣고싶지 않다면 말이다.
함수를 선언식으로 안쓴다면 어떻게 써야할까?
바로 표현식으로 쓰는거다.
위의 사진을 보면 위의 선언문과 다른점이 있다.
차이점은 함수의 이름을 변수로 만들어서 사용하고 함수는 익명함수를 이용했다는 점이다.
이렇게 사용하는게 올바른 방법이다. 왜냐?
우선, 변수를 적용해서 좀더 쉽게 알아보자.
첫번째 행에 변수 res의 값에 sts1이라는 변수와 sts2라는 문자열을 주었다.
그리고 두번째 행에서 바로 res 라는 변수를 출력했다.
당연히 결과는 undefinedsts2이다.
왜?
sts1은 세번째 행에서 선언되었기때문이다.
첫번째,두번째 행에서는 sts1이 뭔지도 모른다.
그런 상황에서 출력을 해버리니 당연히 나 sts1이 뭔지 몰라. 라고 말하는거다.
위의 함수를 표현식으로 써야한다는것도 이거랑 똑같다.
square가 뭔지 모르니까 첫번째 행에서 에러가 발생한다.
그래서 어쩔수없이 함수를 먼저 작성하고
그 뒤에 함수를 사용할수있게끔 만드는것이다.
다른 사람이 함수를 선언한 코드와 표현한 코드를 놓고 비교한다면
어느쪽이 더 쉽게 읽힌다고 할까?
우리는 보다 더 효율적인 코딩을하자.