본문 바로가기

Javascript40

클로저 클로저는 사실 자바스크립트 고유의 개념이 아니다. 함수를 일급 객체로 취급하는 함수형 프로그래밍 언어 (하스켈, 리스프, 얼랭, 스칼라 등)에서 사용되는 중요한 특성이다. MDN에서는 클로저에 대해 다음과 같이 정의하고 있다. 클로저는 함수와 그 함수가 선언된 렉시컬 환경과의 조합이다. 이것만 봐선 잘 와닿지 않는다. const x = 1; function outer() { const x = 10; function inner() { console.log(x); // 10 } inner(); } outer(); outer 함수 내부에서 중첩 함수 inner 가 정의되고 호출되었다. 이때 중첩 함수 inner의 상위 스코프는 outer의 스코프이다. 따라서 중첩 함수 inner 내부에서 자신을 포함하고 있는.. 2020. 11. 18.
this this는 자신이 속한 객체 또는 자신이 생성할 인스턴스를 가리키는 자기 참조 변수다. this를 통해 자신이 속한 객체 또는 자신이 생성할 인스턴스의 프로퍼티나 메서드를 참조할 수 있다. // 전역에서의 this는 window를 가리킨다. console.log(this); // window function foo(number) { // 일반 함수 내부에서 this는 전역 객체 window를 가리킨다. console.log(this); // window return number * 2 } const person = { name: 'kang', getName() { // 메서드 내부에서 this는 메서드를 호출한 객체를 가리킨다. console.log(this); // {name: "kang", getNa.. 2020. 11. 18.
빌트인 객체 원시 값과 래퍼 객체 문자열이나 숫자, 불리언 등의 원시 값이 있는데도 문자열, 숫자 불리언 객체를 생성하는 String, Number, Boolean 등의 표준 빌트인 생성자 함수가 존재하는 이유는 뭘까? const str = 'hello'; // 원시타입인 문자열이 프로퍼티와 메서드를 갖고 있는 객체처럼 동작한다. console.log(str.length); // 5 console.log(str.toUpperCase()); // HELLO 원시 값에 대해 객체처럼 마침표 표기법이나 대괄호 표기법으로 접근하면 자바스크립트 엔진이 일시적으로 원시 값을 연관된 객체로 변환해준다. 즉, 원시 값을 객체처럼 사용하면 자바스크립트 엔진은 암묵적으로 연관된 객체를 생성하여 생성된 객체로 프로퍼티에 접근하거나 메서.. 2020. 11. 18.
프로토타입 상속과 프로토타입 상속은 객체지향 프로그래밍의 핵심 개념으로, 어떤 객체의 프로퍼티 또는 메서드를 다른 객체가 상속받아 그대로 사용할 수 있는 것을 말한다. 자바스크립트는 프로토타입 기반으로 상속을 구현하여 불필요한 중복을 제거한다. // 생성자 함수 function Circle(radius) { this.radius = radius; this.getArea = function() { return Math.PI * this.radius ** 2; } } const circle1 = new Circle(1); const circle2 = new Circle(2); 위 코드를 보면 Circle 인스턴스를 생성할 때마다 getArea 메서드를 중복 생성하고 모든 인스턴스가 중복 소유한다. 이럴 경우 메모리를 .. 2020. 11. 16.