새소식

반응형
FE (프론트)

[SOPT] week01 세미나 TIL - JavaScript

  • -
728x90
반응형

JavaScript란?

인터프리터 언어

- 소스 코드를 바로! 실행하는

- 개발자가 별도의 컴파일 작업 수행 x

컴파일러 vs 인터프리터

자바스크립트 가상 머신

호환성?

 

동적 타입 언어

- 코딩할 때 데이터 타입을 직접적으로 선언하지 않는 언어

- js, python

- 값이 '할당'되는 과정에서 자동으로 변수 타입 결정 (js 엔진의 타입 추론)

- = 런타임에 타입 지정

런타임?

재할당 시 타입 달라져도 오류 안나는 이유

 

데이터 타입

cf) 정적 타입 언어 : c, java, typescript. 변수에 저장할 값의 종류를 사전에 타입 지정

 

일급 객체 (함수)

- 프로그래밍 언어의 기본적 조작을 제한없이 사용할 수 있는 대상

이거 꽤나 어렵네

아니네 좀 많이 어렵네 ㅎ ㅠ

 

- 일급 객체의 조건

  1. 무명의 리터럴(값)로 표현이 가능하다.
  2. 변수나 자료 구조(객체, 배열 등)에 저장할 수 있다.
  3. 함수의 매개변수에 전달할 수 있다.
  4. 반환값으로 사용할 수 있다.

js는 위 조건 모두 만족. 따라서 일급객체

= js의 함수 ~= 변수처럼 사용 가능 => 콜백함수, 고차함수, 클로저 등의 형태가 가능

 

변수

선언 but 값 할당 안할시 -> undefined

선언도 안한 변수 -> ReferenceError 발생

 

js의 스코프

전역 스코프 vs 지역 스코프

변수의 스코프 : 선언 위치에 의해 스코프 가지게됨 -> 전역변수 vs 지역변수

 

js는 함수레벨 스코프를 따른다

ㅎ 어렵당ㅎ

 

함수레벨 스코프란, '함수 내에서 선언된 변수는 함수내에서만 유효'

함수 내 지역 영역에서는 전역과 지역 변수 모두 참조 가능. but 변수명이 중복된 경우, 지역변수를 우선하여 참조.

즉. 함수 내에 있는 애는 지역변수, 나머지는 싹다 전역변수

=> var 범위가 함수레벨스코프임. => 그로 인한 문제점 존재 -> let, const

 

블록레벨 스코프란

코드 블록 (함수, if문, for문, while문, try/catch문 등) 내에서 선언된 변수는 코드 블록 내에서만 유효하며 코드 블록 외부에서는 참조할 수 없다.

즉. 블록 내에 있는 애는 지역변수, 나머지는 싹다 전역변수

 

결론 : 자바스크립트는 기본적으로 함수 레벨 스코프를 따른다. 그러나 ES6에서 도입된 let, const를 통해 블록 레벨 스코프를 사용할 수 있다.

 

스코프 체인

스코프가 계층적으로 연결되어 있는것

변수 참조 시 js엔진이 변수를 참조하는 코드의 스코프에서 시작해서, 상위 스코프 방향으로 이동하면서 선언된 변수를 검색

렉시컬 스코프 lexical scope == 정적 스코프

와웅 어려움

정적 스코프 vs 동적 스코프

js 등 대부분의 프로그래밍 언어는 렉시컬!

함수를 어디서 호출했는지가 아닌, 어디에 선언했는지에 따라 상위스코프 결정

 

변수 생성 단계

1. 선언단계

2. 초기화단계

3. 할당단계

 

선언단계: 변수객체에 변수 등록. 이 객체를 스콮프가 참조하는것. (var vs let vs const)

초기화단계: 변수객체에 등록된 변수를 메모리에 할당. 이 단계에서 변수는 undefined로 초기화

할당: undefined로 초기화된 변수에 실제값 할당

 

var -> 호이스팅.

미리 엔진이 싹 돌아서 선언하기 때문에, undefined 로 출력됨.

반면, let은 referenceError 발생

 

호이스팅

인터프리터가 코드를 실행하기 전에 모든 선언문 (함수, 변수, 클래스 또는 임포트(import) )이 해당 Scope의 선두로 옮겨진 것처럼 동작하는 특성

-> var 변수 선언 및 함수 선언에서 일어남

let, const 변수 선언에서는 호이스팅 발생하지만, TDZ에 의해 변수에 접근 불가

 

암묵적 전역

선언하지 않은 식별자에 값 할당ㅇ시, 전역객체의 프로퍼티가 됨

변수a 가 아닌, window.변수a로 해석한다는 의미

 

https://www.notion.so/dosopt/JavaScript-4d159216966c49d580dbea9637b8368e?pvs=4#c2d0dcf420204631b736227f74b45ae3 

 

 

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.