자바스크립트 7

[JavaScript] 프로퍼티 어트리뷰트

내부 슬롯과 내부 메서드내부 슬롯과 내부 메서드는 자바스크립트 엔진의 구현 알고리즘을 설명하기 위해 ECMAScript 사양에서 사용하는 의사 프로퍼티(presudo property)와 의사 메서드(preseudo method)로 ECMAScript 사양에 등장하는 이중 대괄호 ([[...]])로 감싼 이름들이 내부 슬롯과 내부 메서드이다.다만, 개발자가 직접 접근할 수 있또록 외부로 공개된 객체의 프로퍼티는 아니다.프로퍼티 어트리뷰트와 프로퍼티 디스크립터 객체자바스크립트 엔진은 프로퍼티를 생성할 때 프로퍼티의 상태를 나타내는 프로퍼티 어트리뷰트를 기본값으로 정의한다.프로퍼티 어트리뷰트는 자바스크립트 엔진이 관리하는 내부 상태 값인 내부 슬롯 [[Value]], [[Writable]], [[Enumera..

[JavaScript] let, const 키워드와 블록 레벨 스코프

참고 용어1. 선언 단계 : 스코프(실행 컨텍스트 렉시컬 환경)에 변수 식별자를 등록해 자바스크립트 엔진에 변수 존재를 알리는 단계2. 초기화 단계 : 변수를 초기화하는 단계3. 상수 : 재할당이 금지된 변수로 일반적으로 대문자로 선언하고 여러 단어로 이루어진 경우에는 스네이크 케이스로 표현하는 것이 일반적 ex TAX_RATEvar 키워드로 선언한 변수의 문제점변수 중복 선언 허용초기화문 존재하지 않으면 변수 선언문은 무시되지만, 초기화문이 있는 경우 중복 선언이 된다.var x = 1;var y = 1;var x = 100;var y;console.log(x); // 100console.log(y); // 1함수 레벨 스코프var 키워드로 선언한 변수는 오로지 함수의 코드블록만을 지역 스코프로 인..

[JavaScript] 전역변수의 문제점

변수의 생명 주기변수는 자신이 선언된 위치에서 생성되고 소멸변수 단위 ‘호이스팅’자바스크립트 고유의 특징으로 변수 선언이 스코프의 선두로 끌어 올려진 것처럼 동작호이스팅은 스코프 단위로 동작변수별 생명 주기지역 변수함수 내부 지역변수의 생명 주기는 함수 생명주기와 동일전역 변수전역 변수는 반환문을 사용할 수 없어서 실행할 문이 없을 때 종료되므로 애플리케이션 생명주기와 동일 💡(참고) 브라우저 환경전역 객체는 window로 브라우저 환경에서 var 키워드는 window의 프로퍼티로 웹페이지를 닫기 전까지 유효→ var 키워드로 선언한 전역 변수의 생명 주기 = 전역 객체의 생명 주기 전역 변수의 문제점암묵적 결합모든 코드가 전역 변수를 참조하고 변경을 허용 → 코드 가독성 나빠지고 의도치 않은 상태 변..

[JavaScript] 스코프

스코프란?모든 식별자(변수 이름, 함수 이름, 클래스 이름 등)는 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효 범위가 결정된다. 이를 스코프라고 한다. 즉, 스코프는 식별자가 유효한 범위를 뜻한다. 따라서 스코프 내에서 식별자는 유일해야 하므로 스코프는 네임스페이스이다. 💡다만 var 키워드로 선언된 변수는 같은 스코프 내 중복 선언이 허용되어 의도치 않게 변수 값이 재할당되어 변경되는 부작용을 발생시키다.스코프의 종류전역과 전역 스코프전역 : 코드의 가장 바깥 영역을 전역전역 스코프 : 전역이 만드는 영역전역 변수 : 전역에 선언된 변수 (전역 변수는 어디서든지 참조 가능)지역과 지역 스코프지역 : 함수 몸체 내부지역 스코프 : 지역이 만드는 영역지역 변수 : 지역에 선..

[JavaScript] 함수

함수란?프로그래밍 언어에서 함수는 일련의 과정을 문으로 구현하고 코드 블록으로 감싸서 하나의 실행단위로 정의한 것으로 특정 함수를 구별하기 위해 식별자인 함수 이름을 사용할 수 있다.함수는 객체이지만 일반 객체는 호출할 수 없지만 함수는 호출할 수 있으며 함수 객체만의 고유한 프로퍼티를 갖는다. 매개변수 : 함수 내부로 입력을 전달받는 변수인수 : 입력출력 : 반환값함수 생성함수 정의로 생성할 수 있는 것// 함수 선언문으로 함수 생성functino add(x, y) { return x + y;}함수 호출인수를 매개변수를 통해 함수에 전달하면서 함수의 실행을 명시적으로 지시var result = add(2, 5);console.log(result); // 7함수 사용 이유함수는 여러번 호출이 가능..

[JavaScript] 원시 값과 객체의 비교

원시 값변경 불가능한 값원시타입의 값은 변경 불가능한 값 (변수가 아닌 값에 대한 진술)읽기 전용 값데이터 신뢰성 보장변수에 재할당 시 변수가 참조하던 메모리 공간의 주소가 변경→ 불변성문자열과 불변성문자열은 0개 이상의 문자로 이루어진 집합 1개의 문자는 2바이트 메모리 공간에 저장되므로 문자가 몇 개로 구성되었는지에 따라 필요한 메모리 공간의 크기가 결정C는 문자열을 배열로, Java는 문자열을 String 객체로 처리하지만 자바스크립트는 개발자 편의를 위해 원시 타입인 문자열 타입을 제공하는데 이는 자바스크립트의 장점 중 하나문자열은 유사 배열 객체이면서 이터러블이므로 배열과 유사하게 각 문자에 접근할 수 있으나 일부 문자만 변경할 수 없음값에 의한 전달변수에 원시 값을 갖는 변수를 할당하면 변수에..

[JavaScript] 입력 받기

입력 방법`fs` 모듈파일 시스템과 상호작용할 수 있게 해주기 때문에 테스트 케이스가 파일로 존재할 때 사용한다.`fs.reqdFileSync('/dev/stdin').toString()`을 통해 문자열을 읽고 split를 통해 문자열을 괄호 안의 기준으로 끊어 input 배열로 반환한다.장점:단순성: readFileSync를 사용하여 동기적으로 전체 입력을 한 번에 읽어올 수 있어 코드가 간결속도: 한 번에 입력을 읽어와서 처리하므로 작은 입력의 경우 빠르게 처리간편성: 설정 없이 바로 사용할 수 있어 초보자에게 친숙단점:메모리 사용량: 입력이 매우 큰 경우, 한 번에 메모리에 올리므로 메모리 사용량이 많음비동기 처리 불가능: 동기적으로 처리되므로 비동기적으로 입력을 받아야 하는 상황에서는 부적합한 글..