Language | Basic 30

[JavaScript 스터디] this

메서드가 자신이 속한 객체의 프로퍼티를 참조하려면 자신이 속한 객체를 가리키는 식별자를 참조해야 함 자신이 속한 객체, 자신이 생성할 인스턴스 --> 자기 참조 변수 자바스크립트 엔진이 암묵적으로 생성 함수 호출 방식, this 바인딩 this 바인딩은 함수 호출 방식에 따라 동적으로 결정됨 일반 함수 호출 기본적으로 전역 객체에 바인딩됨 일반 함수로 호출된 모든 함수 내부에서 this는 전역 객체 메서드 호출 메서드를 호출한 객체가 바인딩됨 메서드는 객체에 포함된 것이 아닌, 독립적인 존재(별도의 객체) 따라서, this에 바인딩될 객체는 호출 시점에 결정됨 생성자 함수 호출 생성자 함수가 생성할 인스턴스가 바인딩 됨 Function.prototype.apply/call/bind에 의한 간접 호출 이들..

[JavaScript 스터디] 빌트인 객체

ECMA Script에 정의된 객체 Math, Reflect, JSON을 제외하고 모두 생성자 함수 자바스크립트 객체 분류 표준 빌트인 객체 : ECMA Script에 정의된 객체 호스트 객체 : 자바스크립트 실행 환경(node.js, browser) 사용자 정의 객체 : 사용자가 직접 정의한 객체 원시값, 래퍼 객체 원시값에서 표준 빌트인 객체의 함수 사용할 때, 임시로 래퍼 객체 생성 래퍼 객체 : 문자열, 숫자, 불리언 값에 대해 객체와 같이 접근할 때, 생성되는 객체 원시값에서 임시로 생성된 래퍼 객체는 상황이 종료되면, GC(Garbage Collection) 대상이 됨 전역 객체 코드 실행 전에 자바스크립트 엔진이 생성하는 특수 객체. 최상위 객체 표준 빌트인 객체, 호스트 객체, var로 선..

[JavaScript 스터디] strict mode

자바스크립트 엔진은 식별자 선언을 하지 않아도 암묵적으로 전역객체의 프로퍼티로 식별자를 동적 생성 --> 암묵적 전역 이러한 예상치 못한 문제를 해결하기 위해 좀 더 엄격하게 문법 체크 암묵적 전역, 변수 삭제/중복, with 문 사용시 에러를 발생시킴 전역이나 함수 몸체의 첫 줄에 'use strict'를 추가하면 strict mode 적용 반드시 적용할 범위의 가장 앞에 선언해야 함 함수 몸체에 선언하면 적용 범위는 함수 몸체 전역에 선언하면 적용 범위는 스크립트 단위 전역에 적용하면 스크립트 단위로 적용됨 --> 여러 스크립트에 개별적으로 선언하기 어려움. 문제 발생 가능성 마찬가지로 모든 함수에 적용하기도 불가능함 --> 일관성 X 따라서 즉시 실행 함수로 감싼 스크립트 단위로 사용하는 것이 좋음..

[JavaScript 스터디] 프로토타입

자바스크립트는 프로토타입을 기반으로 상속을 구현 상위 객체의 역할 --> 공유 프로퍼티 제공 객체 리터럴 객체의 프로토타입 --> Object.prototype 생성자 함수에 의한 객체으 프로토타입 --> 생성자 함수의 prototype에 바인딩된 객체 모든 객체는 하나의 프로토타입을 보유함 모든 객체는 __proto__를 통해서 자신의 [[prototype]](프로토타입)에 접근 객체의 __proto__는 Object.prototype.__proto__ 임 함수 객체는 객체중 유일하게 prototype 프로퍼티를 가지고 있음 --> 생성자 함수가 생성할 인스턴스의 프로토타입 모든 객체의 __proto__와 함수 객체의 prototype는 가리키는 대상이 같음. 사용 주체가 다를 뿐(전자는 객체 자신, ..

[JavaScript 스터디] 함수 객체, 일급 객체

일급 객체 무명 리터럴로 생성 가능 === 런타임에 생성 가능 변수, 자료구조에 저장 가능 함수의 매개변수에 전달 가능 함수의 반환값으로 사용 가능 함수 객체의 프로퍼티 함수 === 객체, 함수로 프로퍼티 보유 가능 arguments 인수들의 정보 저장 Iterable한 유사 배열 객체 --> 배열이 아님 --> 배열 메서드 사용 불가능 함수 내 지역변수로 사용 가변 인자 함수 구현에 주로 사용 name 함수의 이름 __proto__ [[prototype]] 내부 슬롯을 참조하는 데 사용 prototype 생성자 함수로 호출할 수 있는 함수 객체 --> constructor만 소유하고 있음 일반 객체와 Non-constructor는 이 프로퍼티가 없음 생성자 함수가 생성하는 인스턴스의 prototype을..

[JavaScript 스터디] 생성자 함수로 객체 생성

Object 생성자 함수 new와 함께 호출하면 빈 객체 생성 생성자 함수에 의해 생성된 객체 --> 인스턴스 생성자 함수 객체 리터럴 객체 생성 --> 하나의 객체만 생성함 --> 다수의 객체 생성 불가능 생성자 함수로 객체를 생성하면 구조가 동일한 객체를 여러개 생성할 수 있음 new 연산자와 함께 사용하지 않으면 일반함수로 취급됨 --> 내부적으로 [[constructor]]가 아닌 [[call]]이 호출 인스턴스 생성은 필수, 인스턴스 초기화는 옵션 생성자 함수의 객체 생성 : 인스턴스 생성, this 바인딩 --> 인스턴스 초기화 --> 인스턴스 반환 모든 함수 객체가 [[constructor]]를 갖지는 않음 Constructor : 함수 선언문, 함수 표현식, 클래스 Non-construct..

[JavaScript 스터디] Property Attribute

프로퍼티의 상태를 나타내는 속성, 자바스크립트 엔진이 프로퍼티를 생성할 때 기본적으로 정의함 값(value), 갱신 가능 여부(writable), 일치 가능 여부(enumerable), 재정의 가능 여부(configurable) 내부 슬롯, 내부 메서드 ECMA Script에서 정의된 의사 프로퍼티(Pseudo property), 의사 메서드(Pseudo method) 자바스크립트 엔진의 내부로직 --> 개발자가 직접 접근 불가능 일부 내부 슬롯/메서드에 한해서 간접 참조 제공 Ex) 모든 객체는 [[prototype]]을 내부 슬롯으로 가짐 --> __proto__를 통해서 참조 가능 Property Descriptor Property attribute 정보를 제공해주는 객체 Object.getOwnP..

[JavaScript 스터디] let, const

var 변수의 문제점 변수 중복 선언 가능 함수 레벨 스코프 변수 호이스팅 let 변수 중복 선언 불가능 블록 레벨 스코프 변수 호이스팅 let 변수는 선언 단계와 초기화 단계가 분리되어 일어남 스코프 시작 지점 ~ 초기화 시작 지점까지 일시적 사각지대 존재 --> 이때에는 변수를 참조할 수 없음 모든 선언은 호이스팅 되지만, ES6의 let, const, class는 호이스팅이 안되는 것처럼 작동함 let 변수는 전역 객체에 없음 --> 실행 컨텍스트에 존재 const const 변수는 반드시 선언과 초기화를 같이 해야함 재할당 불가능 상수 == 재할당이 금지된 변수 재할당이 불가능하기에 원시값이 있는 변수는 값을 교체할 수 없음 객체 변수는 객체 내부를 변경할 수 있음 --> 재할당과 불변은 다름 결..

[JavaScript 스터디] 전역 변수

변수의 생명주기 var 지역 변수의 생명주기는 함수의 생명주기와 일치함 변수의 생명주기는 메모리 공간 확보시점 ~ 가용 메모리 풀로 반환되는 시점 호이스팅은 스코프 단위로 작동함 전역 변수의 생명주기는 코드의 마지막 문이 끝날 때까지 var 전역 변수의 생명주기는 전역 객체의 생명주기와 동일함 전역 변수의 문제점 암묵적 결합 긴 생명주기 소코프 체인에서 제일 마지막에 탐색 --> 상대적으로 검색 속도가 느림 네임스페이스 오염 --> 파일이 분리되어 있어도 전역 스코프를 공유함 전역 변수 사용 억제하기 모든 코드를 즉시 실행 함수로 감싸기 네임스페이스로 사용할 객체 활용 모듈 패턴 ES6 모듈 사용 --> 파일 자체 독자적인 모듈 스코프 제공 학습 도서 '모던 자바스크립트 Deep Dive', 이웅모 저,..

[JavaScript 스터디] 스코프

식별자가 유효한 범위 식별자를 검색할 때 사용하는 규칙 네임스페이스 종류 전역 스코프 : 코드의 가장 바깥 영역 지역 스코프 : 함수 몸체 영역 전역 변수는 어디서든 참조 가능 지역변수는 자신의 지역 스코프와 하위 스코프에서만 참조 가능 스코프 체인 스코프는 함수 중첩에 의해서 계층적인 구조를 띰 자바스크립트 엔진은 변수를 참조할 때 변수 참조 코드의 스코프에서부터 바깥 스코프 방향으로 변수를 탐색함 상위 스코프의 변수는 하위 스코프에서 참조 가능 하위 스코프의 변수는 상위 스코프에서 참조 불가능 함수 레벨 스코프 함수에 의한 지역 스코프 var 키워드로 선언한 변수는 함수의 코드 블록(몸체)만을 지역 스코프로 함 렉시컬 스코프 함수를 어디서 정의했는지에 따라 상위 스코프 결정 함수를 정의한 위치를 기준..