[TIL]201003

슬지로운 개발생활·2020년 10월 3일
0

TIL

목록 보기
14/73
post-thumbnail

1. Coplit

  • 객체 20번까지(20번 : reduce말고 다른방식으로 접근해보기)

2. Koans

04_Scope

scope는 변수의 값(변수에 담긴 값)을 찾을 때 확인하는 곳을 말한다.

함수 선언식(declaration) & 함수 표현식(expression)

  • 문법적 차이
    함수 선언문은 독자적인 구문형태(함수명, 매개변수 목록, 함수 몸체)로 존재하고 표현식은 할당연산자를 이용해 표현식 내부에 생성(리터럴 방식으로 함수를 정의하고 변수에 할당)된다.

  • 자바스크립트 엔진이 함수를 다른 때에 생성하는 차이 (study more)

    함수 표현식은 실제 실행 흐름이 해당 함수에 도달했을때 함수를 생성한다.
    하지만 함수 선언문은 함수 선언문이 정의되기 전에도 호출할 수 있다.

    함수 표현식은 스크립트가 실행되고, 실행 흐름이 let name = function... 매개변수 그리고 함수의 바디에 도달 했을때 함수가 생성된다. 생성된 후 부터 함수를 할당 및 호출을 할 수 있다.

    함수 선언문은 자바스크립트 내부 알고리즘에 의해 어디에서든 사용가능하다.
    자바스크립트는 스크립트를 실행하기 전, 준비단계에서 전역에 선언된 함수 선언문을 찾고, 해당 함수를 생성한다. (스크립트가 진짜 실행되기 전 '초기화 단계'에서 함수 선언 방식으로 정의한 함수가 생성된다.
    스크립트는 함수 선언문이 처리된 이후에 실행되기 때문에 어디에서나 함수선언문에 접근할 수 있다.

  • 스코프 차이
    엄격모드('use strict')에서 함수 선언문이 코드 블록 내에 위치하면 해당 함수는 블록 내 어디서든 접근할 수 있지만 블록 밖에서는 함수에 접근하지 못한다. 하지만 함수 표현식을 사용하면 블록 밖에서도 호출이 가능하다.

    함수 선언문 : 블록 밖에서 호출한 함수는 접근하지 못한다.

    let num = 16;
    if (num % 2 === 0) {
      evenOrOdd();	//실행
      function evenOrOdd() {
        alert("짝수입니다!");
      }
    } else {
      function evenOrOdd() {
        alert("홀수입니다!");
      }
    }
    evenOrOdd();	// Error: evenOrOdd is not defined.

    함수 표현식 : 블록밖에 선언 후 함수를 호출하면 접근이 가능하다.

    let num = 16;
    let evenOrOdd; // 함수 표현식을 사용하기 위한 변수 선언
    if (num % 2 === 0) {
      evenOrOdd = function evenOrOdd() {
        alert("짝수입니다!");
      }
    } else {
      evenOrOdd = function evenOrOdd() {
        alert("홀수입니다!");
      }
    }
    evenOrOdd(); // 실행


함수 호이스팅

호이스팅이란 var 선언문 또는 함수 선언문이 해당 Scope의 선두로 옮겨진 것처럼 동작하는 특성을 말한다.
var로 선언된 변수 선언문을 유효 범위(함수블록) 최상단으로 끌어올리는 행위로 '선언과 할당의 분리'라고 생각하면 좋다.
함수의 선언문도 스코프 내에서 어디서든 함수 선언 혹은 호출할 수 있다.

함수, 변수 우선순위 : 함수 선언문과 변수 할당문이 존재할 시
순서 : 변수명 선언 → 함수 선언 → 변수에 값 할당

0개의 댓글