JavaScript/기초

javascript 기초 1 - 함수(1)

고기고기물고기 2022. 5. 11. 10:01

○ 함수 생성

 1. 함수 선언문 방식

   - 함수 선언문 방식으로 정의된 함수의 경우는 반드시 함수명이 정의되어 있어야 한다.

   - 일반적으로 함수 선언문 방식은 C/C++ 에서 사용하는 함수 정의 방법과 유사하지만, function이라는 키워드를 명시       적으로 사용하고 리넡값과 매개 변수로 넘기는 값에 변수타입 (int, char 등)을 기술하지 않는다는 점에서 차이가 있       다.

 

function add(x, y) {
	return x + y;
}

console.log(add(3, 4)); // 출력값 7

 

 2. 함수 표현식 방식

  - 함수 리터럴로 하나의 함수를 만들고, 여기서 생성된 함수를 변수에 할당하여 함수를 생성하는 방식

var add = function (X, y) {
    return x + y;
}

var plus = add;

console.log(add(3, 4)); // 7
console.log(add(5, 6)); // 11

 3. 기명 함수 표현식 방식

  - 함수 표현식에서 사용된 함수 이름이 외부 코드에서는 접근 불가능하다.

var add = function sum (x, y) {
	return x + y;
}

console.log(add(3, 4)); // 7
console.log(add(5, 6));
// Uncaught ReferenceError : Sum is not defined 에러 발생

 4. Function() 생성자 함수를 통한 함수 생성하기

var add = new Function('x', 'y', 'return x + y');
console.log(add(3, 4)); // 7

 

○ 함수 호이스팅

add(2, 3); // 5

// 함수 선언문 형태로 add() 함수 정의
function add(x, y) {
	return x + y;
}

add(3, 4); // 7

  - 함수 선언문 형태로 정의한 함수의 유효 범위는 코드의 맨 처음부터 시작한다는 것을 확인 할 수 있다. 이것을 함수 호이스팅이라고 부른다.

 

add(2, 3); // uncaught type error

// 함수 표현식 형태로 add() 함수 정의
var add = function (x, y) {
	return x + y;
};

add(3, 4) // 7

 - 이러한 함수 호이스팅이 발생하는 원인은 자바스크립트의 변수 생성과 초기화의 작업아 분리돼서 진행되기 때문이다.

 

○ 함수 객체

// 함수 선언 방식으로 함수정의
function add(x, y){
	return x + y;
}

// add 함수 객체에 result, status 프로퍼티 추가
add.result = add(3, 2);
add.status = 'OK';

console.log(add.result); 5

 - 리터럴에 의해 생성

 - 변수나 배열의 요소, 객체의 프로퍼티 등에 할당 가능

 - 함수의 인자로 전달 가능

 - 함수의 리턴값으로 리턴 가능

 - 동적으로 프로퍼티를 생성 및 할당 기능

 

 @ 변수나 프로퍼티의 값으로 할당

//변수에 함수 할당
var foo = 100;
var bar = function() { return 100; };
console.log(bar()); // 100

//프로퍼티에 함수 할당
var obj = {};
obj.baz = function() { return 200; };
console.log(obj.baz()); //200

 @ 함수 인자로 전달

// 함수 표현식으로 foo() 함수 생성

var foo = function(func) {
	func();
};

//foo() 함수 실행
foo(function() {
	console.log('Function can be used as the argement');
};

//출력결과 : 'Function can be used as the argement'

 @ 리턴값으로 활용

// 함수를 리턴하는 foo() 함수 정의

var foo = function() {
	return fuction() {
    	console.log('this function is the return value');
    };

};

var bar = foo();
bar();

// 출력값 this function is the return value