JavaScript

[DeepDive] 11장(원시값과 객체의 비교), 12장(함수) 필요 내용 정리

원시 타입 데이터

  • immutable한 특징을 갖고 있다.
  • 한번 생성된 원시값은 읽기 전용으로서, 변경이 불가능하다.(변수에 할당되는 값이 기준이 아닌, 메모리에 저장되는 값의 변동 유무가 기준이다.)
  • 특정 변수에 값을 재할당할 경우, 메모리 공간에 저장되어 있는 데이터를 변경하는 것이 아니라 새로운 메모리 공간을 확보한 후에 변경하고자 하는 새로운 데이터를 저장한다. 새로운 데이터가 저장된 메모리를 가리키는 새로운 참조값이 변수에 할당된다.
  • 원시 데이터가 할당된 변수는, 재할당 이외 변수 값을 변경할 방법이 없다. (재할당이 가능할 경우, 상태 변경 추적이 어렵기 때문에 예기치 못한 변경으로부터 자유롭지 못하고 데이터의 신뢰성을 보장하지 못하게 된다.)

 

객체 타입 데이터(참조형)

  • mutable한 특징을 갖고 있다.
  • 메모리 공간에 실제 데이터 값을 저장하는 원시형과 달리, 객체를 가리키는 참조값이 저장된다.
  • 객체 내부 프로퍼티를 동적으로 생성, 수정, 삭제를 할 수 있다. 프로퍼티가 변경이 될 때, 객체 내부 프로퍼티의 값을 가리키는 참조값만 변경이 되며, 변수가 가리키는 객체의 참조값은 변하지 않는다.

 

함수 선언문의 암묵적 식별자 생성

  • 함수 선언문으로 함수를 선언하였을때, 함수 이름은 함수 몸체 (블록) 내부에서만 유효한 식별자이므로 함수 호출을 위해서는 함수 이름과 별도로 생성된 함수 객체를 가리키는 식별자(변수명)가 필요하다. 때문에 함수 객체를 가리키는 식별자가 없으면 생성된 함수 객체를 참조할 수 없기 때문에 호출이 불가하다. 그럼에도 불구하고 함수를 호출할 수 있는 이유는, JS 엔진이 생성된 함수를 호출하기 위해 함수 이름과 동일한 이름의 식별자를 암묵적으로 생성하고, 해당 식별자에 함수 객체를 할당하기 때문이다.
function sayHello() {
  console.log("hello"); // hello
}

sayHello();

 

일급 객체

일급객체: 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 뜻한다.

  • 자바스크립트의 함수는 일급 객체(First-class citizen) 이다. 즉 값처럼(데이터처럼) 자유롭게 사용할 수 있다.
  • 일급 객체이기 때문에 고차함수와 콜백함수로써 사용할 수 있다.
  • 일급 객체의 조건은 다음과 같다.
    • 변수에 할당할 수 있다.
    • 인자로 전달할 수 있다.
    • 리턴값으로 사용할 수 있다.

 

Reference

  1. Javascript에서 왜 함수가 1급 객체일까?
  2. 일급 함수