Today I Learned 2023.02.20. [심화개념1]

Dongchan Alex Kim·2023년 2월 20일
0

Today I Learned

목록 보기
20/31
post-thumbnail

변수

변수(variable)는 데이터를 저장할 때 쓰이는 ‘이름이 붙은 저장소’이다.

  • 한 줄에 여러 변수를 선언하는 것도 가능
let user = 'Dongchan', age = 25, message = 'I am CEO, bitch!';

< 변수 명명 규칙 >

  1. 오직 문자와 숫자, $와 _ 만 들어갈 수 있다.
  2. 첫 글자 숫자 X
  3. 대·소문자 구별

상수

상수는 재할당할 수 없으므로 상수를 변경하려고 하면 에러가 발생.

  • 값이 변경되는 것을 방지 + 다른 개발자들에게 이 변수는 상수라는 것을 알리기 위해 const를 사용.
  • 대문자 상수는 ‘하드 코딩한’ 값의 별칭을 만들 때 사용

자료형

  1. 숫자형
  2. 문자형
  3. 불린형
  4. null값
  5. undefined 값
  6. 객체와 심볼
  7. typeof 연산자

실행 컨텍스트

호이스팅

인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미

  • 선언만 호이스팅 대상이 된다.

스코프

스코프는 참조 대상 identifier를 찾아내기 위한 규칙이다.
identifier는 어디에서 선언됐는지에 의해 자신이 유효한 범위를 갖는다.

  1. 전역 스코프 (Global scope)
    코드 어디에서든지 참조할 수 있다.
  2. 지역 스코프 (Local scope or Function-level scope)
    함수 코드 블록이 만든 스코프로 함수 자신과 하위 함수에서만 참조할 수 있다.

자바스크립트는 함수 레벨 스코프(function-level scope)를 따른다. 함수 레벨 스코프란 함수 코드 블록 내에서 선언된 변수는 함수 코드 블록 내에서만 유효하고 함수 외부에서는 유효하지 않다는 것이다.

  • 실행 컨텍스트의 스코프의 스코프체인(scope-chain)에 의해 참조 순위에서 전역변수가 순위에서 밀린다.
  • 중첩 스코프는 가장 인접한 지역을 우선하여 참조한다.
  1. 렉시컬 스코프(Lexical scope)
    렉시컬 스코프는 함수를 어디서 호출하는지가 아니라 어디에 선언하였는지에 따라 결정됨 → 함수를 선언한 시점에, 상위 스코프가 결정된다.
    ( 함수를 어디에서 호출하였는지는 스코프 결정에 아무런 의미를 주지 X )
var x = 1;

function foo() {
  var x = 10;
  bar();
}

function bar() {
  console.log(x);
}

foo(); //  1
bar(); //  1
  1. 암묵적 전역 스코프
    함수가 호출되면 JS엔진은 y값을 할당하기 위해 먼저 스코프체인을 통해 선언된 변수인지 확인
    → 변수 y의 선언을 찾을 수 X
    → 참조 에러가 발생해야 but, JS 엔진은 window.y = 20으로 해석
    → 선언없이 단지 전역 객체의 프로퍼티로 추가
    → 변수가 아닌 y는 변수 호이스팅이 발생 X
var x = 10; // 전역 변수

function foo () {
  // 선언하지 않은 변수
  y = 20;
  console.log(x + y);
}

foo(); // 30

console.log(window.x); // 10
console.log(window.y); // 20

delete x; // 전역 변수는 삭제되지 않는다.
delete y; // 프로퍼티는 삭제된다.

console.log(window.x); // 10
console.log(window.y); // undefined
profile
Disciplined, Be systemic

0개의 댓글