TIL #7

devPomme·2020년 12월 20일
0

코드스테이츠 풀 프리 코스(We win) 7일차

Primitive type VS Reference type

원시형 자료란?

  • byte, char, short, int, long, float, double, boolean
  • 변수는 곧바로 실제 값을 가진다.
  • 선언된 변수에 할당된 실제 값(value)은 stack에 저장된다.

참조형 자료란?

  • array, object
  • 어떤 값이 저장되어있는 주소를 값으로 가진다.
  • stack에는 변수의 주소(참조 값이)가, 실제 값은 heap에 저장된다.
  • {} !== {} (각자 다른 힙)
  • 얕은 복사: 실제 값이 아니라 참조값을 복사하는 경우, 원본 값이 변하면 사본도 변한다.

Scope & Closure

클로저란?

  • 외부 함수에 접근할 수 있는 내부 함수, 혹은 그러한 원리
  • 함수와 함수가 선언된 어휘적(Lexical) 환경의 조합
    ✎ 여기서 Lexical이란? 어휘적 범위 지정 과정에서 변수가 어디에서 사용 가능한지 알기 위해 그 변수가 소스코드 내 어디에서 선언되었는지 고려하는 것

스코프란?

  • 현재 실행되는 컨텍스트(값과 표현식이 "표현"되거나 참조될 수 있음)

function scope (함수 단위) vs block scope (중괄호({}) 단위)

(1) function scope

함수 내에서 선언된 변수는 함수 내에서만 유효하며 함수 외부에서는 참조할 수 없다. (함수 내에서 선언된 변수=지역변수, 그 외는 모두 전역 변수)

(2) block scope
  • 모든 코드 블록(함수, if/while/for문 등) 내에서 선언된 변수는 코드 블록 내에서만 유효하며 외부에서는 참조할 수 없다. (지역변수: 코드블록 내부에서 선언한 변수)

  • let/const = block scope

  • var = function scope

var fruit = 'apple'; //전역 변수
console.log(fruit); //'apple'
{ var fruit = 'banana'; //전역변수
}
console.log(foo); //banana

let fruit= 'lemon'; //전역변수
{
let fruit= 'mango'; //지역변수
let vegetable='tomato';  //지역변수
}
console.log(fruit); // 'lemon'
console.log(vegetable); ReferenceError: bar is not defined;


profile
헌신하고 확장하는 삶

0개의 댓글