1. 참조에 의한 전달과 외부 상태의 변경
function hihilong(primitve, obj) {
primitive +=100;
obj.name = "kim",
}
이 코드를 살펴보면 매개변수 primitive 는 원시값을 전달받고 매개변수 obj 는 객체를 전달받는다.
따라서 이렇게 선언한 애들을 변경해보자!
// 외부 상태
var num = 100;
var person = {name: "byebyelong" }
console.log(num) //100
console.log(person) //{name:"byebyelong"}
hihilong(num,person);
// 원시값은 값 자체가 복사되어 전달되고 객체는 참조값이 복사되어 전달된다.
console.log(num) //100 //원시값은 원본이 훼손되지 않음.
📌 정리해보면~!
원시타입 인수를 전달받는 매개변수의 경우 원시값은 변경불가능한 값이다. 따라서 직접 변경할 수 없기 때문에 재할당을 통해 할당된 원시값을 새로운 원시값으로 "교체" 해해주는 것이라고 했다. \
객체값은 변경가능한 값이므로 직접 변경할 수 있기 때문에 재ㄹ할당 없이 할당된 객체를 변경할 수 있다.
2. 다양한 함수의 형태
2-1. 즉시 실행 함수
- 함수정의와 동시에 즉시 호출되는 함수
- 즉시 실행함수는 단한번만 호출되며 다시 호출할 수 없다.
- 반드시 그룹연산자 () 로 감싸야한다. 그렇지 않으면 에러난다.
//익명 즉시 실행 함수
(function () {
var a =3;
var b =5;
return a*b;
}());
(function foo(){
var a =3;
var b =5;
return a*b;
}());
foo();
// referenceError: foo is not defined
2-2. 재귀함수
- 함수가 자기 자신을 호출하는 것
- 재귀호출을 수행하는 함수
- 반복되는 처리를 위해 사용한다.
- 재귀함수는 자신을 무한 재귀 호출하기 때문에 탈출 조건을 반드시 만들어놔야함
function countdown(n){
if (n <0) return;
console.log(n);
countdown(n-1); //재귀함수호출
}
countdown(10);
2-3. 중첩함수
- 함수 내부에 정의된 함수를 말함
- 중첩함수를 포함하는 함수를 외부함수라고 부른다.
- 중첩함수는 외부 함수 내에서만 호출할 수 있다.
- 중첩함수는 자신을 포함하는 외부 함수를 돕는 헬퍼 함수의 역할을 함
function outer() {
var x=1;
function inner() {
var y =2;
console.log(x+y); //3
}
inner();
}
outer();
2-4. 📌 콜백함수
- 함수의 매개변수를 통해 다른 함수의 내부로 전달되는 함수를 콜백함수라고 함
- 매개변수를 통해 함수의 외부에서 전달받은 함수를 고차함수라고 함
- 고차 함수는 콜백함수를 자신의 일부분으로 합성
- 콜백함수는 고차 함수에 의해 호출되며 이때 고차 함수는 필요에 따라 콜백 함수에 인수를 전달할 수 있다.
repeat( 5, function (i) {
if (i%2) console.log(i);
}); //1 3
2-6. 순수함수와 비순수 함수
순수함수
- 어떤 외부 상태에 의존하지도 않고 변경하지도 않는, 즉 부수효과가 없는 함수를 순수함수
- 순수함수는 동일한 인수가 전달되면 언제나 동일한 값 반환
- 즉 오직 매개변수를 통해 함수 내부로 전달된 인수에게만 의존해 값을 생성해 반환함
- 인수의 불변성 유지
- 함수의 외부상태를 변경하지 않는다.
var count =0; // 현재의 상태:
//순수함수 : 동일한 인수가 전달되면 동일한 값 반환함
function increase(n){
return ++n;
}
count = increase(copunt);
// 순수함수가 반환한 결과값을 함수에 재할당해서 상태 변경함
비순수함수
- 외부 상태에 의존하거나 외부 상태를 변경하는, 즉 부수효과가 있는 함수를 비순수함수
- 외부 상태에 따라 반환값이 달라짐
- 외부 상태에 의존하거나 외부 상태를 변경함
- 상태 변화를 추적하기 어려움
var count =0; // 현재의 상태: increase 함수에 의해 변화할것임
//비순수함수
function increase(){
return ++count; //외부 상태에 의존하며 외부 상태 변경
}
increase();
'Deep Dive 정리' 카테고리의 다른 글
[JS Deep Dive] 15장 - let const 키워드와 블록레벨 스코프 (0) | 2024.08.28 |
---|---|
[JS Deep Dive] 13장 - 스코프 (0) | 2024.08.28 |
[JS Deep Dive] 12장 -함수 (1) (0) | 2024.08.28 |
[JS Deep Dive] 11장 -원시값과 객체의 비교 (0) | 2024.08.28 |
[JS Deep Dive] 10장 -객체리터럴 (1) | 2024.08.27 |