자바스크립트

지환·2024년 6월 3일
0

자바스크립트

목록 보기
8/30

6.3일

식별자

  1. myNumber라는 식별자는 값 23를 식별 할 수 있어야함.

  2. myNumber는 23이 저장되어 있는 메모미 주소를 기억함.

(여기선 (0012CCGWH80))

  1. 식별자는 값이 아니라 --> "메모리 주소"를 기억함.
  1. 변수, 함수, 클래스 등의 이름은 모두 "식별자"
  • 변수이름 : 메모리 상에 존재하는 변수 값을 식별
  • 함수이름 : 메모리 상에 존재하는 함수 식별

메모리 상 존재하는 어떤 값을 식별할 수 있는 이름을 --> 식별자 라고한다.

변수 선언(Variable Declaration)

  • 변수 선언 : 값을 저장하기 위함
  1. 메모리 공간 확보
  2. 변수 이름과 확보된 메모리 공간의 주소를 연결
  3. 값을 저장할 수 있게 준비하는 과정
  • 변수 선언 시 var,let,const사용

var 키워드 단점

  • 블록 레벨 스코프를 지원하지 않음.

  • 함수 레벨 스코프를 지원

    • 의도치 않게 "전역변수가 선언" 된다.
var person

  • 변수 선언문은 변수 이름을 등록 / 값을 저장할 메모리 공간 확보 함.

    • 변수 선언 이후 , 변수값은 할당하지 않음.
    • 메모리 공간은 비어있음. --> 자바스크립트 엔진에 의해 undefined 값이 할당되어 초기화

자바스크립트 엔진은 변수 선언 -> 2단계를 거친다.

  1. 선언 단계 : 변수 이름을 등록해서 자바스크립트 엔진에 변수의 존재를 알린다.

  2. 초기화 단계 : 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화한다.

    • var/let/const 키워드를 사용하여 변수선언.
      • 선언 단계와 초기화 단계가 동시에 진행됨.
    • var person
      • 선언 단계를 통해 변수 이름은 person으로 등록
      • 초기화 단계를 통해 person 변수에 암묵적으로 undefined를 할당 초기화진행
    • var 키워드로 선언한 변수 --> 어떠한 값을 할당하지 않아도 undefined라는 값을 갖는다.

변수 실행시점과 호이스팅

변수 호이스팅

  • 변수 선언문이 코드의 선두로 끌어 올려진것 처럼 동작하는 자바스크립트 고유의 특징
console.log(person); //undefined
var person; //변수 선언문
  • 인터프리터에 의해 한 줄 씩 순차적으로 실행된다.

  • ReferenceError가 발생하지 않음 --> undefind가 출력된다.

  • 변수 선언(선언 단계 & 초기화 단계)는 소스코드가 한 줄씩 순차적으로 실행되는 시점 -> 런타임이아니라 그 이전 단계에서 먼저 실행되기 때문이다.

  • 자바스크립트 엔진은 소스코드를 한 줄씩 실행하기 앞 서,

    • 먼저 소스 코드의 평가 과정을 거치면서 소스코드 실행을 위한 준비를 한다.
    • 변수 선언을 포함한 모든 선언문(변수 선언문,함수 선언문 등)을 소스 코드에서 찾아내 먼저 실행한다.
    • 소스평가가 끝나면 --> 변수 선언을 포함한 모든 선언문을 제외하고 소스코드를 한 줄씩 순차적으로 실행

정리

  1. 변수 선언이 소스코드의 어디에 있든 상관없이 다른 코드보다 가장 먼저 실행
  1. 변수 선언이 어디에 위치하던 상관없이 어디서든 변수를 참조할 수 있다.
    (ReferenceError)가 발생하지 않는 이유

변수 선언과 값의 할당은 실행시점이 다르다!

var person = "Jihwan" // 변수 선언과 값의 할당을 한 문장으로 표현
  • 변수 선언 : 런타임 이전에 먼저 실행

  • 값의 할당 : 런타임에 실행

    • 런타임 에러 : 컴파일과정을 마친 프로그램은 사용자에 의해 실행되어 지며, 이러한 응용프로그램이 동작되어지는 때를 런타임(Runtime)이라고 부른다.

    • 컴파일 에러 : 컴파일 타임 에러는 프로그램이 성공적으로 컴파일링되는 것을 방해하는 신택스에러(Syntax error)나 파일참조 오류와 같은 문제를 말한다.

  • 컴파일 --> 런타임 순서로 진행된다.

// Example

console.log(person); // undefined

var person = "JIhwan"; // 변수 선언 & 값의 할당

console.log(person); // YOUNG MIN

값의 할당

  • var 키워드로 선언한 변수는 선언과 동시에 undefined로 초기화 되어있던 값에서 값의 할당 과정에서 JIhwan으로 재할당 됐다.

  • 결과적으로 재할당까지 적용되었을 경우, 이전 값인 undefined나 Jihwan은 어떤 변수도 값으로 갖고 있지 않게 된다.

==> 어떠한 식별자와도 연결되어 있지 않다는 뜻.

==> 이러한 불필요한 값들은 가비지 콜렉터(Garbage collector) 에 의해 메모리에서 자동 해제 된다. ( 단, 언제 해제될지는 예측 불가능)

profile
아는만큼보인다.

0개의 댓글