특정 동작(기능)을 수행하는 일부 코드의 집합(부분)
예제 1번
function helloFunc() { // 함수 선언
console.log(1234); // 실행코드(명령)
}
helloFunc(); //1234, 함수 호출
예제 2번
function sum(x, y) { // x 와 y 는 매개체
console.log(x + y)
}
sum(1, 3) // 안에 들어있는 숫자를 인수 라고 부른다.
sum(4, 12) // 함수 재활용
function returnFunc() {
return 123; // 반환, 함수를 밖으로 내보낼 수 있음
}
let a = returnFunc(); // 변수 선언, 함수 호출(실행), 내보낸 return값을 내보내서 returnFunc()안으로 들어감
console.log(a); ///123
// 함수 선언
function sum(a, b) {
return a + b; // a 와 b 는 매개변수
}
// 재사용
let a = sum(1, 2); // 1과 2는 인수, 인수는 숫자가 아니더라도 모든 js데이터(문자값같은)를 사용할 수 있다.
let a = sum(7, 12);
let a = sum(2, 4);
console.log(a, b, c); // 3, 19, 6
// 함수 선언
function hello() {
console.log('Hello~');
}
// 함수 표현
let world = function () {
console.log('World~')'
}
// 함수 호출
hello(); // Hello~
world(); // World~
객체 데이터 안의 속성 부분에 함수가 할당되어있는 것을 의미함
// 객체 데이터
const daldaro = { // const 선언 → 재할당 불가능
name: 'DALDARO',
age: 95,
getName: function () { // 메소드(Method)
return this.name; // this 는 this가 소속된 객체 데이터를 의미함
}
};
const herName = daldaro.hetName();
console.log(herName); // DALDARO
// 혹은
console.log(daldaro.getName()); // DALDARO
// 입력
function myFeat() {
console.log("특별한 일을 했어요!");}
// 호출
myFeat();
// 생성
function MyFeat() {
console.log(this.name + "가 특별한 일을 했어요!");}
// 지정
const owner1 = { name: "Alice" };
// 호출
MyFeat.apply(owner1);
// 생성
function MyFeat() {
console.log(this.name + "가 특별한 일을 했어요!");}
// 지정
const owner1 = { name: "Alice" };
//호출
MyFeat.call(owner1);
const ThisObject = {
id: 1,
getValue: function() {
return 1;
},
}
thisObject.id;
thisObject.getValue(); // 함수가 어떤 위치에 있느냐에 따라 부르는말이 달라짐, 객체 안의 함수는 매소드
thisOject.__proto__
thisObject.toString(); // 결과 : object Object
JS
const obj = {
id: 1,
title: 'my object'
};
function myFunction() {
return a;
}
// 1급 함수 : 함수를 값으로 취급함 (변수에 할당할 수 있음, 개념의 확장)
obj.title = 'change';
obj.fn = myFunction;
myFunction(myFunction) // 함수를 인자에 넣을 수 있음
result ()
이름을 따로 지정을 하지 않고 사용한다. function ()
화살표함수의 장점
간결한 문법중첩함수에서의 가독성을 높여준다this 바인딩명시적 변환클로저화살표함수의 단점(제한점)
예시 1번
const YourFeat = () ==> {
return 0
}
const YourFeat2 = a ==> 0 * 2; // 인자 하나면 괄호 생략가능
const YourFeat3 = (a, b) ==> { // 인자가 없거나 두개면 괄호 생략 불가능
return a + b;
}
예시 2번
const double = function (x) { // 일반함수
return x * 2
}
console.log('double: ', double(7))
// 위와 같은 식인데 화살표함수로 변형한거
const doubleArrow = (x) => { // 화살표함수
return x * 2
}
console.log('doubleArrow', doubleArrow(7))
// 위와 같은 식인데 객체데이터(중괄호를 쓰는 객체 "()")가 아닌 것을 사용할때의 예시
const doubleArrow = (x) => ({ name: 'daldaro' })
console.log('doubleArrow', doubleArrow(7))
setTimeout(() => { // setTimeout(()=>{} 과 setTimeout (function) {} 은 같다.
console.log('daldaro')
}, 3000) // 3초후에 daldaro 라는 단어가 실행된다.
setInterval(함수, 시간)
시간 간격마다 함수 실행 (반복적으로 값이 나타남)
clearTimeout()
설정된 Timeout 함수를 종료
const timer = setTimeout(() => { // setTimeout(()=>{} 과 setTimeout (function) {} 은 같다.
console.log('daldaro')
}, 3000) // 3초후에 daldaro 라는 단어가 실행된다.
const h1El = document.querySelector('h1') // 3초가 흐르기전에 h1태그를 클릭하면 타이머가 멈춘다.
h1El.addEventListener('click', () => {
clearTimeout()
})
// setTimeout(함수, 시간)
function timeout(callback) {
setTimeout(() => {
console.log('daldaro')
callback()
}, 3000)
}
timeout(() => {
console.log('Done')
}) // 콜백함수
정의되자마자 즉시 실행되는 함수 (결과를 바로 얻을 수 있다는 장점)
즉시실행함수를 사용할때는 다음 식으로 넘어갈때 반드시 세미클론(;)을 붙여야 한다.
(1)() 함수를 1의 위치에 넣어준다. (첫번째 괄호)(1()) 함수를 1의 위치에 넣어준다. (두번째 소괄호의 앞쪽)const a = 7 // 익명함수 (const에 따로 이름을 정해주지 않은 경우)
function double() {
console.log(a * 2)
}
double();
(function () {
console.log(a * 2)
})();