특정 동작(기능)을 수행하는 일부 코드의 집합(부분)
함수를 선언할 때는 function이라는 키워드를 명시하고 원하는 함수의 이름을 작성을 하되 소괄호 띄우고 중괄호. 중괄호 사이에 명령이 들어가 있음. 그명령이란 콘솔 로그 함수. 명령은 여러개가 될 수 있음. 안에 있는 명령을 제외하고 나머지 부분이 함수를 만든 함수 선언.
함수란 명령들을 감싸고 있는 하나의 집합.
그리고 코드 집합의 내용을 실현하려면 선언한 함수의 이름을 적고 뒤에 소괄호를 열고 닫은 뒤 세미클론으로 마무리 하면 함수를 호출해서 실행하겠다는 의미. 함수를 실행하겠다는 것은 함수 안에 있는 명령들을 실제로 동작시키겠다는 의미. 그래서 함수 안의 콘솔 로그가 실행되면서 콘솔창에 숫자 데이터 1234가 출력됨.
함수의 재밌는 건 함수 안에서 특정 값을 반환할 수 있고 그럴 때 return이라는 키워드를 사용함. 따라서 function 키워드를 적은 뒤 한 칸 뛰고 함수 이름을 returnFunc라는 이름으로 정했고 그 안의 내용으로 숫자 데이터 123을 반환하도록 return 키워드를 작성함. 그럼 함수 안에서 숫자 데이터를 밖으로 반환해주게 됨.
그렇게 빠져나간 데이터는 let이라는 키워드를 사용하는 a라는 변수가 [returnFunc라는 키워드가 호출(실행) 되면] 받음.
따라서 a라는 변수가 그 데이터를 받아서 가지고 있는데 그걸 콘솔에 출력하면 123이 나옴. 함수안에서 반환된 숫자 데이터.
리턴 키워드로 js데이터를 내보내기 할 수 있고 그렇게 내보내진 값을 새로운 변수에 할당해서 추가적으로 사용할 수 있다.
리턴이라는 키워드로 a+b가 밖으로 내보내짐. 이러한 a와 b를 매개변수(parameters)라고 부름. 일단 sum이라는 이름으로 함수를 정의했고 그 정의한 함수를 뒤에서 호출함. 즉 실행됨. sum이라는 함수를 실행할때 어떤 데이터를 집어넣을 수가 있음. 그렇게 들어간 데이터들을 함수(sum)라는 것이 받아서 내부에서 처리해서 내보내주는 건데, 그러한 데이터들을 받는 함수 안의 변수를 데이터를 받아주는 매개체가 되는 변수, 즉 매개변수가 됨. 여기서는 매개변수를 a와 b로 정의한 것. 즉 a와 b는 일종의 변수인데, 변수는 앞에서도 봤듯이 일종의 데이터를 저장하는 곳. 따라서 sum함수가 실행될 때 숫자데이터가 내보내져서 a라는 변수에 3이됨.
함수를 실행할 때 매개변수로 받으려 하는 데이터들을 인수라고 함. 즉 1,2,7,12가 인수.
함수를 선언할 때 함수가 호출되는 부분에서 데이터를 집어넣을 수 있고, 그 데이터를 집어넣은 것을 받아줄 변수라는 것을 소괄호 사이에 정의할 수 있다. 그렇게 정의된 변수를 함수안에서 매개체가 되는 변수라고 해서 매개변수라고 부름. (매개변수는 함수 안에서밖에 사용할 수 없어요) 그 매개변수가 받아줄 특정 데이터를 인수라고 함. 인수는 꼭 숫자가 아닐수도 있음. 즉, 매개변수와 인수를 구별할 줄 알아야한다!
funtion 키워드 다음 한칸 띄우고, 함수 이름은 hello. 소괄호 열리고 중괄호 사이에 콘솔로그를 통해서 hello라는 문자 데이터를 개발자도구 콘솔에 출력하려함. 이 부분을 함수 선언한다고 얘기함. 함수 이름은 내가 원하는 걸로 명시하면 됨. 이름 있는 함수를 기명 함수라고 함!
그 아래에 보면 이름이 없는 상태로 소괄호가 시작함. 중간부분 함수를 익명함수라고 함. 근데 이름을 지정하지 않으면 호출할 수 없기 때문에 쓸모없는 함수가 됨. 보통은 익명함수를 데이터로 활용될 수 있고, 혹은 내용처럼 변수(world)에 할당해서 사용하기도 함.
function 키워드를 사용하고 이름을 명시하면 그건 함수를 선언한다고 하고,
이름이 없는 익명함수를 변수에 할당하는 건 함수를 표현한다고 함. 함수 선언과 함수 표현은 나중에 호이스팅(Hoisting)에서 상용됨.
콘스트로 변수를 선언할건데 콘스트이므로 재할당이 불가능하다는 의미. heropy라는 변수 부분에는 중괄호로 시작해서 중괄호로 끝나는 객체 데이터가 통으로 들어가 있음. 객체 데이터 내부에는 name, age, getName 이라는 총 세개의 데이터가 정의되어 있음. name 부분은 문자데이터, age 부분은 숫자 데이터, getName은 익명 함수가 데이터로 들어가져 있음. 함수도 하나의 데이터임. 이 함수는 함수표현임. 선언아님.
객체 데이터 내부에 속성들 말고도 함수라는 데이터를 할당하는것을 속성이라 부르지 않고 메소드(Method)라고 함.
함수의 역할을 보면 함수가 실행이 되면 어떠한 값을 리턴, 반환하는데, 그 값이 this라는 키워드를 통해 name이라는 데이터를 반환하고 있음. this는 this가 소속되어있는 객체 데이터를 의미함. 따라서 this.name은 객체데이터 안에 들어있는 name이라는 속성의 값을 의미함. 즉 HEROPY.
따라서 getName을 실행하면 heropy함수 안의 name이라는 데이터가 가진 값이 getName의 밖으로 빠져나가는 구조.
아래에서 보면 heropy라는 객체데이터 안의 getName이라는 메소드를 소괄호를 열고닫아서 호출하고 있다. (실행한다) 따라서 getName이라는 익명함수를 실행(호출)하는 건데, 그게 실행되면 getName에서 빠져나온 HEROPY라는 문자 데이터가 hisName이라는 변수에 할당됨. 콘솔로그로 결과를 확인해보면 결과가 잘 나옴.
근데 꼭 변수(hisName)에 할당해야 하는 건 아님. 변수이름 하나하나 만드는 것도 일이라서..통상적으로는 그 아래에 콘솔로그에서 heropy라는 객체데이터 안의 getName을 실행해서 바로 출력할 수 있음.
가장 중요한 건 함수라는 것을 어떤 데이터처럼 활용할 수 있고, 대표적으로 객체데이터의 속성에도 함수를 삽입할 수 있는데, 그 속성은 메소드라고 부른다는 것.