개인공부/TIL(Today I Learned)

TIL 9일차_데이터의종류와 SCOPE

soon327 2021. 1. 27. 01:43

false인 값 5가지

'' 0 NaN null undefined

  • NaN = Not A Number 숫자가 아니다.
  • null = 값이없다. 빈값을 주려고 사용자가 null을 할당하기도 한다.

원시타입 데이터(primitive type data)와 참조타입 데이터(reference type data)

  1. 원시타입 데이터(primitive type data)

    • number, string, boolean, undefined, null, bigint, symbol
    • 고정된 저장공간을 차지하는 데이터
    • 원시타입 데이터는 call stack이라는 곳에 저장한다.
      • 자바스크립트가 크롬에서 돌아갈 때는 V8엔진을 따르는데,
        V8엔진의 메모리 모델이 call stack이다.
        근데 참조타입 데이터인 함수도 call stack에 저장된다. 띠용?
        이건 V8 메모리 모델의 정책이기 때문인데,
        운영체제에서는 메모리 영역을 커널, stack, heap, data로 구분한다.
        (이정도로만 알아두고 추후에 공부할 때 더알아보자)

        참조: 아는개발자
  2. 참조타입 데이터(reference type data)

    • 배열,객체,함수
    • 저작공간이 유동적으로 늘어나는 특별한 저자공간을 사용한다.
    • heap에 저장되는데, 크롬에서는 함수가 call stack에 저장되는 듯 하다.
  3. 변수에는 하나의 데이터만 담을 수 있다.

    아닌데? 배열이랑 객체같은건 여러개 담을수 있는데?

  • 배열과 객체를 담았을 때는, 여러 데이터가 들어갔다 나갔다 할 수 있는데,
    이는 참조타입 데이터를 변수에 할당할 때는 변수에 값이 아닌 주소를 저장하기 때문이다.
  • 변수에 원시타입 데이터가 할당되면 값자체가 담기고,
    참조타입 데이터가 할당되면 보관함의 주소가 담긴다.

... = rest parameter과 spread syntax

...은 rest parameter와 spread syntax라는 두가지 이름을 갖는다.

  1. rest parameter
    함수의 매개변수(parameter)에 ...을 쓰면 rest parameter로 사용되게된다.
    이때, 남은 매개변수를 모두 배열의 형태로 ...변수에 할당한다.

  2. spread syntax
    그외의 사용은 spread syntax로 쓰인다. (함수를 입력할떄 입력인자로 쓴다던가)
    spread syntax는 '펼쳐준다'로 설명할 수있다. 해당값들을 쭉 펼쳐준다.블로그의 ...(더보기)를 연상.
    예를들어 args=[1,2,3,4] 이면,
    ...args=1,2,3,4가 된다.

Scope

var키워드 vs let키워드 vs const키워드

  1. var키워드: JacaScript는 기본적으로 함수단위로 자신만의 scope를 가지는데, 이러한 고전적인 변수 할당방식이 var이다.

  2. let 키워드: block단위({})로 scope를 구분한다. 사용자가 편리하다.

  3. const 키워드: block단위로 scope를 구분하며, let과 달리 값의 재정의가 불가능하다.

    let과 const가 재선언이 불가능한 반면, var는 재선언이 가능하다.

    재선언이 가능하다고 좋은게 아닌 이유는,보통 재선언은 사용자의 오류 즉, 버그인 경우가 많으므로
    let과 const를 쓰는 것이 이러한 실수를 예방해준다.

Scope관련 주의사항!

  • 전역범위에 너무많은 변수를 선언하지 않도록 한다.

    • 전역범위를 대표하는 객체인 window에는 이미 많은 변수가 default값으로 설정되어있다.
      • Global scope에서 선언된 함수, var로 선언한 변수는 window객체에 입력되므로 주의히자.
  • 위와 이어지는 말인데, 절대로 선언 키워드(var, let, const)없이 변수를 초기화 하지 말자.

    • 이렇게하면 해당 변수가 전역변수로 취급되어 window에 저장된다.
      예를들어 선언키워드 없이 age=90을 작성하면 이 agewindow.age=90으로 저장된다.

Today's ?!

  • 클로저 : 외부함수의 변수에 접근할 수 있는 내부함수
    뭔지는 대략 알겠는데 어떻게 쓸지 감도안온다. 조금더 찾아보고 정리해야겠다.

  • TIL을 작성하는데 너무 많은 시간을 쓰는 것 같다.
    좀더 키워드 중심으로, 나만 알아봐도 된다는 생각으로 작성을하고,
    정리된 내용은 따로 카테고리를 만들어서 작성하던가 해야겠다.

'개인공부 > TIL(Today I Learned)' 카테고리의 다른 글

TIL 11일차_JS기본  (0) 2021.01.29
TIL 10일차_git과 CLI  (0) 2021.01.28
TIL 8일차_배열과 객체  (0) 2021.01.26
TIL 7일차_CSS기본  (0) 2021.01.25
TIL 6일차_시맨틱태그  (0) 2021.01.24