let | const name = function(){}
js
let add = function (a, b) {
return a + b;
};
console.log("익명함수", add(5, 3)); // 8
let | const name = () => {}
js
// let add2 = (a, b) => {
// return a + b;
// };
// console.log("화살표함수", add2(4, 2));
let add2 = (a, b) => a + b;
// 위와 동일한 함수임.
//실행구-한줄, 값이 바로 리턴시 생략 가능
console.log("화살표함수", add2(4, 2)); // 6
- 함수 이름의 첫 글자는 대문자로 시작
- 반드시 'new' 연산자를 붙여 실행
let | const name = new function()
(function run() {})();
js
/*
function run() {
console.log("🏃♂️");
}
run();
=> 선언, 호출을 따로 해야됨
*/
(function run() {
console.log("즉시실행함수", "🏃♂️");
})();
// 선언부분을 소괄호로 감싼 후 값으로 변환 -> 괄호 바로 뒤에 호출();
// 화살표함수를 즉시실행함수로 변환
let sum = (a, b) => {
console.log(a + b);
};
sum(500, 120); // 620
(function sum2(a, b) {
console.log(`즉시실행함수 실행 결과 : ${a + b}`);
})(500, 120); // 620
js
// const add = (a, b) => {
// return a + b;
// };
// 인자
const add = (a, b) => a + b; // 실행구-한줄, 값이 바로 리턴시 생략 가능
const multiply = (a, b) => a * b;
// 함수를 인자로 받는 고차함수
function calculator(a, b, action) {
// 특정한 일을 수행하는 함수를 전달 받을 함수
let result = action(a, b);
console.log(arguments);
// 전달된 인자 정보를 출력해주는 프로퍼티 (함수에 기본적으로 내장, 매개변수 정보는 arguments 객체에 저장
console.log("함수 calculator의 결과물", result);
}
calculator(1, 2, add);
calculator(1, 2, multiply);
// 전달된 action은 콜백함수로 부른다.
js
// 함수를 인자로 받는 고차함수.
// 뭔지 모르지만 누군가 나중에 함수를 정의하여 불러줌(인자를 집어넣어줌) - 콜백함수
function iterate(max, action) {
for (let i = 0; i <= max; i++) {
action(i); // action 호출
}
}
// 값을 출력해주는 함수
function print(num) {
console.log(num);
}
function multi(bb) {
console.log("bb가 3배수로", bb * 3);
}
iterate(10, print);
console.log();
iterate(10, (num) => console.log(num * 2)); // 화살표 함수 부분이 action에 들어감. print 함수와 상관 없음.
// 실행함수를 화살표함수로 실행. action에 함수 호출을 안 하고 직접 함수를 작성해도 됨
iterate(5, multi);
// setTimeout(callback, 시간)
// setTimeout(() => {console.log("3초 뒤 이 함수 실행");}, 3000); // 아래 함수와 동일. 아래와 같이 들여쓰는것이 일반적
setTimeout(() => {
console.log("3초 뒤 이 함수 실행");
}, 3000);
js
function display(num) {
num = 444; // 지역변수. 좋지 않은 방법으로 사용
console.log(num);
}
const value = 3;
display(value); // 444
console.log(value); // 3
// 오브젝트로 사용
function displayObj(obj) {
obj.name = "nuriya"; // 좋지 않은 방법.
// 외부에서 주어진 인자(object)를 내부에서 변경. 메모리 주소를 가져오는 것이라 오브젝트 내용이 바뀜
console.log("display 함수 안에서", obj);
}
const nabi = { name: "Nabiya", color: "orange" };
displayObj(nabi); // { name: 'nuriya', color: 'orange' }
console.log(nabi); // { name: 'nuriya', color: 'orange' } // 내부에 있는 지역변수가 전역변수를 바꿈
console.log();
/*
스프레드
- 기존에 있는 것을 전부 불러와서 바꾸고 싶은 내용을 변경 가능
- 기존 오브젝트들을 유지하면서 변경하고 싶은 오브젝트는 새로운 오브젝트로 수정 가능
*/
// 바른 변경 방법
function changeName(obj) {
console.log({ ...obj, name: "bori" }); // 스프레드
}
changeName(nabi); // { name: 'bori', color: 'orange' }로 변경됨