JaveScript

모던자바스크립트 스터디 11일차이다. 25장 클래스 오늘은 위 단원을 공부하고 모르는것을 정리했다. # 궁금증 프로토타입 체인보다 클래스 상속 기능을 선호하고 많이 쓰이게된 이유가 뭘까? # 이유 class 상속을 사용하지 않고 의사 클래스 상속(pseudo classical inheritance) 패턴을 사용해서 클래스 흉내를 내는 것에 불과함. object.create보다 new 쓰면 장점 1. 코드가 현저히 적어진다. 2. 유지관리가 편해진다. 3. private properties && method 4. 생성자에 매개변수 전달 가능 어차피 생성자를 통해 인스턴스를 생성할거면 더 장점이 많은 class로 관리하는 것이 편하기 때문 이는 class에서 쓰던걸 함수에서 쓰려니까 많은 불편함과 에러 또는..
모던자바스크립트 스터디 10일차이다. 23장 실행 컨텍스트 24장 클로저 오늘은 위 단원들을 공부하고 모르는것을 정리했다. # 궁금증 왜 자바스크립트는 private, protected 같은 접근 제한자를 공식적으로 지원하지 않는것인가? # 이유 JavaScript는 프로토타입 기반 프로그래밍 언어(아마도 프로토타입 기반 스크립팅 언어가 더 정확한 정의일 것) 프로토 타입 기반 프로그래밍 언어는 클래스가 없는 객체 지향 프로그래밍(js는 ECMA 262 Edition 4 이후 class 지원) 객체지향 언어는 분류와 관계에 초점을 맞추도록 권장하지만, 프로토타입 기반 언어는 동작에 먼저 초점을 맞추고 나중에 분류 객체 프로그래밍 언어는 객체, 메서드, 속성, 클래스, 캡슐화, 집계, 상속 및 다형성이 있..
모던자바스크립트 스터디 9일차이다. 21장 빌트인 객체 22장 this 오늘은 위 단원들을 공부하고 모르는것을 정리했다. # 궁금증1 url에서 예약문자중 +기호는 스페이스(공백; space)으로 치환되는 것일까? 그럼 이것을 어떻게 구별해야할까? # 이유 서버에서 맘대로 + 기호를 모두 공백(space)으로 치환해버려서 공백의 인코딩 값은 %20과 + 기호의 인코딩 값인 %2B 가 같게 보이는 현상이다. 이와 관련되서 전에 했던 Python 블로깅이 있다. 해결방법은 퍼센트 인코딩을 사용하면 되고 블로깅을 참고하면 된다! # 궁금증2 왜 브라우저 환경과 Node.js 환경이 다른걸까? # 이유 브라우저는 엄격한 보안 정책과 제한을 받는데, Node.js는 그렇지 않다는 점이다. -> Node.js는 결..
모던자바스크립트 스터디 8일차이다. 19장 프로토타입 20장 strict mode 오늘은 위 단원들을 공부하고 모르는것을 정리했다. # 궁금증1 strict mode는 자바스크립트 언어의 문법을 더 엄격히 지원하여 오류를 발생시킬 가능성이 높거나 자바스크립트 엔진 최적화 작업에 문제를 일으킬 수 있는 것을 방지하기 때문에 쓰는 것이 좋다고 한다. 그럼 strict mode를 안쓰는 것이 좋은 상황은 언제일까? # 답변 엄격 모드를 부분적으로만 지원하거나 전혀 지원하지 않는(예: Internet Explorer 버전 10 이하 등) 수많은 브라우저 버전이 여전히 사용되고 있으므로 오류를 일으킬 수 있음 향후 ECMAScript의 버전에서 정의가 바뀔 가능성이 있는 일부 구문 엄격 모드 코드는 때때로 엄격 ..
모던자바스크립트 스터디 7일차이다. 17장 생성자 함수에 의한 객체 생성 18장 함수와 일급 객체 오늘은 위 단원들을 공부하고 모르는것을 정리했다. 궁금증 '모던자바스크립트 17장 235page'를 보면 Object 생성자 함수를 사용해 객체를 생성하는 방식은 특별한 이유가 없다면 유용해보이지 않다는 설명이 적혀있을까? 이유 객체리터럴 방식으로 객체 생성을 한다면 👉🏻 모든 객체를 보여주는 Object객체와 연결된다. 생성자 함수로 객체 생성을 한다면 👉🏻 자신을 만든 생성자 객체만 연결된다. 객체 리터럴 생성자 함수 간편성 - 필요한 속성과 값을 중괄호에 나열하면 되서 간단하고 직관적 - 함수를 정의하고 객체 생성하는 과정이 객체 리터럴보다 복잡함 확장성 - 객체 리터럴은 한 번에 하나의 객체만 생성 ..
모던자바스크립트 스터디 6일차이다. 15장 let, const 키워드와 블록레벨 스코프 16장 프로퍼티 어트리뷰트 오늘은 위 단원들을 공부하고 모르는것을 정리했다. 궁금증 스코프의 시작지점부터 초기화 시작 지점까지 변수를 참조할 수 없는 구간을 일시적 사각지대(TDZ)라고 한다. 그렇다면 TDZ를 만든 이유가 뭘까? 배경 우선, 에디션 3까지는 EMCAScript에 예외가 존재하지 않았다는 점을 언급해야 한다. var와 let이 도입되었을때부터 예외가 시작된것이다. 즉, 이전에는 예외가 없었는데, 자바스크립트가 발전함에 따라서 에러가 생기기 시작했다는 것이다. 이유 그렇다면 TDZ를 왜 만든것인가? 1. 변수가 선언되기 전에 변수에 액세스할 수 있다는 것은 이상한 것이기 때문에 2. let과 const가..
모던자바스크립트 스터디 5일차이다. 13장 스코프 14장 전역 변수의 문제점 오늘은 위 단원들을 공부하고 모르는것을 정리했다. 궁금증 왜 es5에서 지원하던 전역변수를 es6에서는 사용할 수 없을까? 이유 웹 호환성을 깨뜨리는 모든 ES6 기능은 모듈 코드 내에서만 사용할 수 있습니다. 예를 들어 let키워드가 웹을 손상시키는 경우 전역 코드에서는 이를 식별자로 처리하지만 모듈 내부에 있으면 키워드로 처리합니다. 마찬가지로, 블록 로컬 함수에 대한 적절하지만 이전 버전과 호환되지 않는 범위 지정 의미는 모듈 코드 내에서만 활성화됩니다.(ex. var 같은 전역변수 선언 문제) 그래서 파일 단위에서 사용하는 모듈은 그 파일에서만 사용되고 export로 선언한 모듈처럼 의도적으로 노출하지 않는 한 외부에서 ..
모던자바스크립트 스터디 4일차이다. 11장 원시값과 객체의 비교 12장 함수 오늘은 위 단원들을 공부하고 모르는것을 정리했다. 궁금증 자바스크립트가 언어 차원에서 immutable함을 제공해주지 않는 다는 것이다. 외부상태, 함수의 외부에서 함수 몸체 내부로 전달한 참조값에 의해 원본 객체가 변경되어 immutable 상태가 된다는 뜻이다. 불변성을 중요하게 생각한다고 책에 나와있는데, 불변성을 완벽히 제공해 주지 않는다니 이상했다. 이유 const라는 키워드만으로는 함수형프로그래밍이 요구하는 수준의 불변성을 실현하기 어렵다. const로 객체를 선언할 경우 객체의 주소값 자체를 변경시킬 순 없어도, 객체 내부의 속성이 변경되는 것 까지는 막지 못하기 때문이다. 즉 객체의 속성값에 어떤 값이 추가되든 수..