함수는 하나의 특별한 목적의 작업을 수행하도록 설계된 독립적인 블록을 의미한다.
자바스크립트에서의 함수는 하나의 데이터 타입(data type)으로, 변수를 대입한다거나, 함수에 프로퍼티를 지정하는 것도 가능하다. 또한 여러번 중첩하여 고차함수로 활용할 수 있다.
함수의 정의
1. 함수이름
함수이름은 함수 내부 코드에서 자신을 재귀적으로 호출하거나, 해당 함수를 구분하는 식별자로 사용한다.
2. 괄호 안에 쉼표( , )로 구분되는 함수의 매개변수(parameter)
함수의 정의에서 전달받은 인수를 함수 내부로 전달하기 우해 사용하는 변수
3. 중괄호 { } 안에서 함수를 정의하는 자바스크립트 구문
-실행문
-반환문 return[option] : 반환문을 통해 함수의 실행된 결과를 전달받는다. 배열이나 객체를 포함한 모든 타입의 값을 반환할 수 있다.
함수 선언식 - Function Declarations
//일반 함수
function double(a, b){
return a * b
}
//double()함수가 실행되고 변수 result에 담긴다.
let result = double(5,10) = 50;
함수 표현식 - Function Expressions
const func = function(a,b){
return a * b;
}
//[ES-6]
const func = (a, b) => a * b;
Function 생성자 함수
객체 리터럴{ ...statement }를 사용하면 객체를 쉽게 만들 듯이, new연산자를 통해 새로운 객체(Fucntion)를 생성할 수 있다.
생성자 함수의 필요성은 다음과 같다.
- 여러개의 동일한 프로퍼티를 가지는 객체를 생성하기 위해 필요하다.
- Prototype을 이용하여 메모리 절감을 위해 필요하다.
생성자 함수 규칙
1. 함수 이름의 첫 글자는 반드시 대문자.
2. 함수 이름 앞에 new 연산자를 붙여서 호출한다.
const newFunc = new Func('a', 'b', 'return a + b')
혹은
function Func(chat, old) { //괄호안에 parameter을 넣어줄수 있음.
this.chat(함수의 Property)
this.old
}
const myFunc = new Func() //괄호안에 arguments을 넣어줄수 있음.
함수의 유효 범휘(Function Scope)
자바스크립트는 함수를 블록 대신 사용한다. 자바스크립트에서 함수는 자신이 정의된 범위 안에서 정의된 모든 변수 및 함수에 접근할 수 있다.
const newFunc = new Func(a, b)
전역 함수 : 모든 전역변수와 전역 함수에 접근할 수 있다.
내부 함수 : 어떤 함수 내에 정의된 함수는 부모함수에서 정의된 모든 변수와 부모 함수가 접근할 수 있는 모든 다른 변수 까지 접근이 가능하다.
커링
함수 하나가 n개의 인자대신, n개의 함수를 만들어 각각 인자를 받게 하는 방법
function adder(x) {
return function(y) {
return x + y
}
}
adder(2)(3); //5
adder의 매개변수 x의 값을 고정 해놓고 재사용할 수 있다.
let add10 = adder(10);
add10(2); // 12
let add5 = adder(5);
add5(5); // 10
클로저 모듈 패턴
변수를 스코프 안쪽에 가두오 함수 밖으로 노출 시키지 않는 방법.
function makeCounter() {
let counter = 0;
return {
increment: function() {
counter++;
},
decrement: function() {
counter--;
},
getValue: function() {
return counter;
}
}
}
고차함수 (higher order function)는 함수를 인자(argument)로 받거나 함수를 리턴하는 함수를 말한다.
'FE BE 개발 메모장 > Javascript' 카테고리의 다른 글
자바스크립트 배열(Array) (0) | 2021.01.09 |
---|---|
Array.prototype. filter, map, reduce (0) | 2020.12.08 |
클로저(Closure)란? (0) | 2020.10.27 |
자바스크립트 함수의 범위(Scope) (0) | 2020.10.27 |
자바스크립트에서 호이스팅이란? (0) | 2020.10.07 |