[ 모던 자바스크립트 스터디 ] strict mode
·
Archive/Develop
function foo() { x = 10; } foo(); console.log(x); foo 함수 내에 선언되지 않은 x 에 값을 할당했을 때, 에러가 나야할 것 같지만 자바스크립트는 이 x 를 암묵적으로 전역 객체에 동적 생성한다. 이런 현상을 암묵적 전역이라고 한다. 이런 현상을 막으려 var, let, const 키워드를 사용하지만, 실수는 언제나 발생할 수 있기 때문에 ES5 부터 엄격모드(strict mode) 가 추가되었다. ESLint 같은 정적 분석 툴을 사용해도 strict mode 와 동일한 효과를 줄 수 있으니 참고하자. ES6 에서 도입된 클래스와 모듈은 기본적으로 strict mode 가 적용된다. strict mode 적용 함수 몸체의 맨 위에 'use strict'; 을 추..
[ 모던 자바스크립트 스터디 ] 왜 __proto__ 접근자 프로퍼티를 통해 접근하는가?
·
Archive/Develop
[[Prototype]] 내부 슬롯의 값, 즉 프로토타입에 접근하기 위해 접근자 프로퍼티를 사용하는 이유는 상호 참조에 의해 프로토타입 체인이 생성되는 것을 방지하기 위해서다. const parent = {}; const child = {}; child.__proto__ = parent; parent.__proto__ = child; // TypeError: Cyclic __proto__ value 프로토타입 체인은 단방향 링크드 리스트로 구현이 되어야한다. 따라서 순환 참조하는 프로토타입 체인이 만들어지면 프로토타입 체인의 종점이 없기 때문에 프로퍼티를 검색할 때 무한 루프에 빠질 수 있다. 따라서 체크 없이 무조건적으로 프로토타입을 교체할 수 없게끔 __proto__ 접근자 프로퍼티를 통해 프로토타입..
[ NestJS ] 의존성 문제 발생 케이스 기록
·
Archive/Develop
A 모듈의 AA 서비스가 존재한다. B 모듈의 BB 서비스가 존재한다. BB 서비스 내에서 AA 서비스를 이용하기 위해 B 모듈에서 A 모듈을 import 했지만, AA 서비스에서 직접적으로 Inject 하는 레포지토리들이 존재해 자꾸만 B 모듈에 provider 에 해당 레포지토리들을 추가하라고 한다. 이 경우 A 모듈에서 AA 서비스를 export 해주면된다. 그럼 외부에서 AA 서비스를 이용할 수 있게된다.
[ 모던 자바스크립트 스터디 ] 프로토타입
·
Archive/Develop
프로토타입? 핵심 요약 자바스크립트는 다른 언어들과는 다르게 클래스 개념이 없다. (물론 이후에는 생기지만, 초창기엔 없었다) 때문에 기존 객체를 복사하여 새로운 객체를 생성해만했고, 이러한 특징을 가진 언어라 프로토타입 기반 언어라고 칭하는 것이다. 프로토타입은 크게 프로토타입 객체를 참조하는 prototype 속성, 객체 멤버인 proto 속성이 참조하는 링크가 있다. 여기서 prototype 속성은 함수의 인스턴스가 가진다. 상속과 프로토 타입 상속 객체 지향 프로그래밍의 핵심 개념으로, 어떤 객체의 프로퍼티 또는 메서드를 다른 객체가 상속받아 그대로 사용할 수 있는 것을 말한다. 자바스크립트는 프로토타입을 기반으로 상속을 구현한다. 이로 인해 불필요한 중복을 제거할 수 있다. // 생성자 함수 f..