2020. 7. 4. 01:18ㆍSERVER 🖥/JavaScript 입문
안녕하세요 Jlight입니다.
지난 포스팅에 이어 JavaScript에 함수(function)에 대해 알아보겠습니다.
🚀JavaScript 함수(Function) 이해하기
함수는 하나의 특별한 목적의 작업을 수행하도록 설계된 독립적인 블록을 뜻합니다.
또한 자바스크립트에서 함수는 객체 타입을 가집니다.
함수 생성 방법
▪️ 함수 선언식 (Function Statement)
▪️ 함수 표현식 (Function Expressions)
자바스크립트에서 함수를 생성하는 방법은 위처럼 크게 2가지로 나누어집니다.
두 방법은 함수의 이름과 호이스팅에서 차이가 있는데 선언 방법과 차이에 대해 알아보겠습니다.
📌 함수 선언식
함수 선언문은 함수 리터럴 형식과 같으며 호이스팅에 영향 을 받습니다.
* 함수 리터럴 : 함수 이름 없이 몸체만 있는 형태를 함수 리터럴이라고 합니다.
✍️ 함수 선언식의 생성과 실행
// 함수 선언문 생성
function funcName(parameters){
}
funcName(parameters) // 함수 선언문 실행
📌 함수 표현식
함수 표현식은 호이스팅에 영향을 받지 않으며 함수를 변수에 할당합니다.
여기서 표현식이란, 자바스크립트에서 값을 반환 하는 식 또는 코드를 말합니다.
✍️ 함수 표현식 생성과 실행
// 함수 표현식 생성
function funcName = function(parameters){
}
funcName(parameters) // 함수 표현식 실행
✍️ 화살표 함수를 통한 함수 표현식 생성과 실행
// 함수 표현식 생성 with 화살표 함수
function funcName = (parameters) => {
}
funcName(parameters) // 함수 표현식 실행
🚀 함수 선언과 표현식의 차이 : 호이스팅
호이스팅은 var을 통해 정의된 변수 선언문을 유효 범위 최상단으로 끌어올리는 행위를 뜻합니다.
예시를 통해 알아볼까요❓
✍️ 변수 호이스팅의 예시
var a = 10;
console.log(a);
console.log(b); // b가 선언되기 전에 출력하기. 오류가 나지 않는다.
var b = 30;
위 코드를 보면 순서가 잘못됨을 알 수 있습니다.
변수 b가 선언되기 전에 출력이 일어났기 때문입니다. 그렇다면 이 코드를 실행한다면 오류가 발생할까요?
출력 화면
여기서 호이스팅의 개념이 등장합니다.
호이스팅은 이전 내용처럼 var을 통해 정의된 변수 선언문을 유효 범위 최상단으로 끌어올리는 행위를 뜻합니다.
그렇기에 위 코드가 사실 아래와 같이 동작합니다.
var a = 10;
var b; // 호이스팅에 의해 var 변수인 b가 상단에 위치한다.
console.log(a);
console.log(b); // b가 선언되기 전에 출력하기. 오류가 나지 않는다.
var b = 30;
따라서 b를 출력해도 오류가 아닌 undefined를 가집니다.
✍️ 함수 호이스팅
함수 호이스팅도 변수 호이스팅과 유사합니다.
함수 표현식처럼 선언된 변수 선언문이 존재한다면 유효범위 최상단으로 올라갑니다.
예시를 통해 알아보겠습니다.
console.log(jlight());
console.log(glight());
// 함수 선언문을 통한 생성
function jlight(){
console.log("hello");
}
// 함수 표현식을 통한 생성
var glight = function(){
console.log("hi");
}
출력 화면
함수 선언문을 통한 생성은 유효 범위의 최상단으로 올라갑니다.
따라서 위 함수를 최상단으로 이동하기 때문에 정상적인 출력이 가능합니다.
그러나 함수 표현식을 통한 생성은 변수 호이스팅으로 인해 변수 값만 올라가기 때문에 "undefined"형태로 남게됩니다.
즉 위 동작을 순서대로 본다면 다음과 같습니다.
// 함수 선언문 전체가 최상단으로 이동된다.
function jlight(){
console.log("hello");
}
var glight; // 함수 표현식을 통한 선언은 변수 호이스팅으로 코드가 다음과 같이 바뀐다. "undefined"
console.log(jlight());
console.log(glight());
// 함수 표현식은 함수 전체가 올라가지 않는다.
var glight = function(){
console.log("hi");
}
🚀 자바스크립트의 함수는 "일급 객체" 이다.
일급 객체는 다음의 조건은 크게 4가지가 있는데 이에 대해 자세히 알아보겠습니다.
조건 1. 변수나 데이터 구조안에 담을 수 있다.
변수에 익명의 함수를 넣거나 담을 수 있습니다.
예시를 볼까요❓
var jlight = function(){
console.log("변수에 함수 담기"); // jlight라는 변수에 익명 함수 넣기
}
console.log(jlight());
위 코드에서는 변수 Jlight에 익명의 함수를 넣었습니다.
따라서 일급 객체는 함수를 변수나 데이터 구조안에 담을 수 있습니다.
조건 2. 다른 함수의 파라미터로 전달할 수 있다.
다음 코드를 살펴봅시다.
// jlight라는 변수에 함수 생성
var jlight = function() {
var a = 25;
return a;
}
//glight라는 파라미터를 갖는 함수 생성
var glight = function(number) {
console.log(number);
}
//jlight값이 glight의 파라미터값으로 사용됨
glight(jlight());
Jlight라는 함수와 파라미터값을 갖는 glight라는 함수가 있습니다.
여기서 맨 마지막 코드를 보면, glight에 필요한 파라미터 값을 Jlight로 처리하였습니다.
정리하면 일급 객체는 다른 함수의 파라미터로 전달하거나 사용될 수 있습니다.
조건 3. Return값으로 사용 가능하다.
역시 예시를 통해 이해해볼까요❓
//jlight 함수 생성
var jlight = function() {
console.log("hello");
// return 값으로 함수를 사용함
return function(){
var x = 25;
return 25;
}
}
console.log(jlight()());
선언된 함수에 return값이 있습니다.
그런데 return값이 함수 형태로 되어있습니다.
즉 일급 객체는 변수나 데이터가 아닌 함수 형태인 Return값을 취할 수 있습니다.
조건 4. 할당에 사용한 이름과 관계없이 고유한 구별이 가능하다.
var jlight = function glight(){
console.log("고유 식별 가능");
}
jlight(); // -> 고유 식별 가능
glight(); // -> ERROR
jliught라는 변수에 glight라는 함수를 할당하였습니다.
즉 glight의 호출은 안되지만 jlight를 호출함으로써 고유한 구별이 가능합니다.
조건 5. 동적으로 프로퍼티 할당이 가능하다.
//함수 생성
function jlight() {
console.log("Empty");
}
//함수에 프로퍼티 추가
jlight.secondName = "Glight";
console.log(jlight.secondName); // -> Glight
지금까지 자바스크립트의 Function(함수)에 대해 알아보았습니다.
여기서 호이스팅의 개념부터 기본적인 생성 방법, 일급 객체에 대해 자세히 다루었습니다.
그럼 다음 포스팅 기다려주세요❗️
'SERVER 🖥 > JavaScript 입문' 카테고리의 다른 글
Java Script 손놓은지 1달. 핵심만 다시 복습하기 (0) | 2020.08.27 |
---|---|
ES6 + JAVASCRIPT, 변수 선언 방법 + SCOPE (0) | 2020.07.17 |
DATA TYPE, Object(객체) + Array(배열) 이해하기 (0) | 2020.07.03 |
DATA TYPE - 기초 데이터 타입 및 기본형 (Primitive Type) 이해하기 (0) | 2020.07.02 |