Node.js 과제

이기안·2022년 5월 20일
0

js

목록 보기
1/1

🐤 JavaScript의 자료형과 JavaScript만의 특성은 무엇일까 ?

느슨한 타입(loosely typed)의 동적(dynamic) 언어
느슨한 타입: 타입 없이 변수를 선언하는 것이다.
동적언어: 런타임에 타입이 결정되는 언어
런타임: 컴퓨터 프로그램이 실행되고 있는 동안의 동작

  • JavaScript 형변환
    JavaScript의 형변환에는 임시적 형변환, 명시적 형변환의 2가지로 나뉜다.
    암시적 형변환:자바스크립트 엔진이 필요에 따라 자동으로 데이터타입을 변환시키는 것.
    예:문자열+숫자, 동치비교(==)
    명시적 형변환 : 개발자가 의도를 가지고 데이터타입을 변환시키는 것이다.
    예: Object(), Number(), String(), Boolean()
  • ==, ===
    ==연산자는 값을 비교하기 전에 타입이 다를 경우 타입을 변환 후 값을 비교
    === 연산자는 타입을 변환하지 않고 비교함
    즉, ==연산자는 타입이 달라도 값이 같으면 true를 반환하지만 ===연산자는 타입이 다르면 false를 반환
  • 느슨한 타입(loosely typed)의 동적(dynamic) 언어의 문제점은 무엇이고 보완할 수 있는 방법에는 무엇이 있을지 생각해보세요.
    문제점: 타입 체크를 하지 않기 때문에 실행 도중에 변수에 예상치 못한 자료형이 들어와 TypeError를 발생할 수 있음.
  • undefined와 null의 미세한 차이들을 비교해보세요.
    underfined는 변수를 선언하고 값을 할당하지 않은 상태, null은 변수를 선언하고 빈 값을 할당한 상태(빈 객체)이다.

🐤 JavaScript 객체와 불변성이란 ?

  • 기본형 데이터와 참조형 데이터
    기본형 데이터
    기본형 데이터는 값을 그대로 할당한다.
    메모리상에 고정된 크기로 저장되며 원시 데이터 값 자체를 보관하므로, 불변이다.
    기본적으로 같은 데이터는 하나의 메모리를 사용한다.
    예시) Number, String, Boolean
    예시) Object, Array, Function RegExp,Map
  • 불변 객체를 만드는 방법
    불변 개체를 만드는 방법은 2가지가 있는데 const와 Object.freeze()이다.
    const를 사용하면 객체 재할당은 가능하지만 객체의 속성은 변경 가능하다.
    Object.freeze()를 사용하면 동결된 객체를 반환하지만 객체의 재할당은 가능하다.
    그러므로 불변객체를 만드는 방법은 const와 Object.freeze()를 조합하여(const의 재할당불가 + Object.freeze()의 객체속성 변경불가)
  • 얕은 복사와 깊은 복사
    얕은 복사: 객체를 복사할 때 원래값과 복사된 값이 같은 참조를 가리키고있는 것을 말한다. 객체안에 객체가 있을 경우 한개의 객체라도 원본 객체를 참조하고 있다면 이를 얕은 복사라고 한다.
    깊은 복사: 객체안에 객체가 있을 경우에도 원본과의 참조가 완전히 끊어진 객체를 말한다.

🐤 호이스팅과 TDZ는 무엇일까 ?

  • 스코프, 호이스팅, TDZ
    스코프: 변수에 접근할 수 있는 범위 전역변수, 지역변수로 2가지의 타입이 있다.
    전역변수: 말 그대로 전연에 선언되어 있어 어느 곳에서든지 해당 변수에 접근 가능
    지역변수: 해당 지역에서만 접근할 수 있어 지역을 벗어난 곳에서는 접근 불가능
    호이스팅:인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미합니다.
    TDZ: let,const,class 구문의 유효성을 관리한다.
  • 함수 선언문과 함수 표현식에서 호이스팅 방식의 차이
    함수 선언문:함수 선언문으로 선언된 함수는 함수 호이스팅이 발생, 런타임 이전에 함수 객체가 생성되므로 함수가 정의되기 전에 함수를 호출할 수 있음.
    함수 표현식으로 선언된 함수는 변수 호이스팅이 발생하며, undefined로 초기화. 그러므로 함수 표현식으로 선언한 함수는 함수가 정의되기 전에 함수를 호출할 수 없다.
  • 실행 컨텍스트와 콜 스택
    실행 컨텍스트: 코드를 실행하기 위해 필요한 환경, 실행할 코드에 제공할 환경 정보들을 모아놓은 객체. 자바스크립트 코드의 실행 흐름과 코드에 대한 정보가 이 실행 컨텍스트로 관리됨.
    콜 스택: 자바스크립트가 함수 호출을 기록하기 위해 사용하는 우물 형태의 데이터 구조.
  • 스코프 체인, 변수 은닉화
    스코프 체인: 해당 코드의 유효 범위(in scope) 안에 있는 변수를 정의하는 객체의 체인, 리스트다.
    변수 은닉화: 직접적으로 변경되면 안 되는 변수에 대한 접근을 막는 것

🐤 실습 과제

  • 콘솔에 찍힐 b 값을 예상해보고, 어디에서 선언된 “b”가 몇번째 라인에서 호출한 console.log에 찍혔는지, 왜 그런지 설명해보세요.
    주석을 풀어보고 오류가 난다면 왜 오류가 나는 지 설명하고 오류를 수정해보세요
let b = 1;

function hi () {

const a = 1;

let b = 100;

b++;

console.log(a,b);

}

//console.log(a);

console.log(b);

hi();

console.log(b);

예상
9행:1이 출력될 것이다.
10행: 1,101이 출력될 것이다.
11행: 1이 출력될 것이다. 전역변수 b와 스코프 안의 b는 다를것
주석을 푼다면: a가 선언되어 있지 않기 때문에 에러가 날것이다.
결과: 예상과 같았다.
오류 해결: 1행의 let b=1;아래에 a를 선언해 주었다.
오류 이유: 선언되지 않은 변수를 출력하려고 했기 때문에 오류가 났다.

profile
node.js 공부중

0개의 댓글