JavaScript Deep Dive 요약 (2)

JungHanMa·2023년 2월 13일
0
post-thumbnail

12장  함수

: 프로그램을 실행하는 최초단위 ( var sum = 10 + 20, 반복문, if문 등등)

함수 : 일련의 과정을 문으로 구현하고 코드 블록으로 감싸서 하나의 실행단위로 정의한것

함수의 구성요소 3가지 : 인수, 매개변수, 함수 몸체

function add (x, y) { // 매개변수
    return x + y; // 반환값
}
=>  function 시작구문 {  과 끝나는 구문 }  합쳐서 함수 몸체

add(2,3) // 인수


함수의 선언방법

  1. function add()  =>   함수 선언식
  2. var add = function add() 기명함수, var add = function() 익명함수   =>   함수 표현식
  3. var add = new Function('x','b','return x + b')   =>  생성자 함수
  4. var add = (x,b) => x+b;  =>   화살표 함수

함수 선언식과 표현식의 차이: 함수 선언문은 선언시 함수 객체를 할당하고, 함수 표현식은 add라는 식별자를 undefined를 초기화하고, 코드를 실행하면서 런타임에 함수 객체를 할당한다.


함수의 목적 :
1. 중복 제거
2. 재 사용성 증가
3. 유지 보수성 증가
4. 코드의 신뢰성 증가


매개변수와 인수:
1. 인자 > 매개변수 : 무시되는것 처럼 보임
2. 인자 < 매개변수 : undefined
=> 모든 인자는 arguments안에 유사 배열로 존재하기 떄문.


매개변수의 최대개수:
1. 이상적인 매개변수 개수는 0개
2. 3개 이상 넘지 않는것으로 권장
3. 넘으면 객체로 관리


반환문의 2가지 기능
1. 함수 실행을 중단하고, 몸체를 빠져 나간다.
2. 리턴뒤에 오는 표현식(값)을 반환하고, 반환값 없으면 undefined 반환


매개변수의 메모리할당 : 매개변수도 각각 타입에 따라 메모리 할당됨.
1. 원시타입 : pass by value => 다른 메모리 주소 재할당
2. 참조타입 : pass by reference => 참조주소


콜백함수와 고차함수 :
var logOdds = function(i) {
   if(i%2) console.log(i)
}
repeat(5, logOdds);


콜백함수 : logOdds (매개변수를 통해 다른 함수로 전달되는 함수)
고차함수 : 5 (함수 외부에서 콜백함수를 전달 받은 함수)


13장  스코프

스코프 : 모든식별자 (변수이름, 함수이름, 클래스이름)는 자신이 선언된 위치에 의해 자신을 참조할 수 있는 유효범위를 결정한다. 즉, 스코프는 식별자가 유효한 범위를 말한다.


스코프의 종류:
1. 전역변수 : 코드의 가장 바깥 영역 => 어디서든 참조 가능
2. 지역변수 : 함수몸체 => 자신의 지역 스코프와 하위 지역 스코프와 유효하다. (스코프 체인)


스코프체인: 자바스크립트엔진은 스코프 체인을 통해 변수를 참조하는 코드의 스코프에서 시작하여 상위 스코프 방향으로 이동하며, 변수를 검색한다.
=> 자바스크립트엔진은 코드(전역코드, 함수코드) 를 실행하기 앞서, 렉시컬 환경을 생성하고, 변수 선언이 실행되면 변수식별자가 렉시컬환경의 key로 등록되고, 변수 할당시 식별자의 을 변경한다.


렉시컬환경 :
1. 전역 렉시컬 : 코드가 로드되면 생성
2. 지역 렉시컬 : 함수를 호출하면 생성

함수 레벨 스코프 : var 키워드로 생성된 변수는 오로지 함수의 코드 블록(함수 몸체)만을 지역 스코프로 인식한다.
블록 레벨 스코프 : let, const로 선언된 변수는 모든 코드 블록이 지역 스코프를 만든다.
동적 스코프 : 함수를 어디서 호출 했냐에 따라, 함수의 상위 스코프를 결정
렉시컬스코프(정적 스코프) : 함수를 어디서 선언 했는지 따라, 상위 스코프를 결정



14장   전역 변수의 문제점

생명주기 :
1. 전역변수 : 마지막문이 실행되어, 더이상 실행할 문이 없을때 종료된다.
2. 지역변수 : 함수의 생명주기와 같음(함수를 종료하면서 해당 지역변수의 참조가 끝나기떄문) => 대부분의 경우


전역변수의 문제점 :
1. 암묵적 결합 (변수 중복선언)
2. 긴 생명주기
3. 스코프체인에서 종점
4. 네임스페이스 오염


15장   let과 const 키워드와 블록레벨 스코프

var 키워드 선언시 문제점 :

  1. 변수 중복 선언가능
  2. 함수 레벨 스코프
  3. 런타임 이전에, 선언하면서 undefined로 초기화진행




let 키워드 :
1. 변수 중복 선언 방지
2. 블록 레벨 스코프
3. 런타임 이전에 변수선언만 진행, 초기화는 선언문에서 실행됨 => 일시적 사각지대(TDZ)


const 키워드 :
1. 재할당 금지 : 선언과 동시에 초기화 및 할당
2. 참조는 변경가능 (객체에 동적으로 프로퍼티 추가, 삭제, 변경가능) <==> 원시는 불가능
3. 재할당을 금지 할 뿐  "불변" 을 의미하지 않는다.

profile
Frontend Junior

0개의 댓글