this — 호출 방식에 따라 달라지는 자바스크립트의 핵심 키워드
·
Frontend/Javascript Essentials
자바스크립트를 배우다 보면 헷갈리는 개념 중 하나가 바로 this다.같은 코드처럼 보여도 어떻게 호출했느냐에 따라 가리키는 대상이 달라지기 때문이다.이번 글에서는 this의 본질과 동작 방식을 직관적으로 정리해본다. 1. this란 무엇인가?this는 자기 자신을 참조하기 위한 변수다.자바스크립트 엔진이 함수를 실행할 때마다 암묵적으로 생성하며, 함수 내부에서 지역 변수처럼 사용할 수 있다.this는 자신이 속한 객체 또는 생성될 인스턴스를 가리키며, 그 바인딩은 함수를 어떻게 호출했는지에 따라 동적으로 결정된다. 2. 왜 this가 필요한가?1. 객체의 메서드가 자기 자신을 참조하기 위해this가 없다면 person.name처럼 객체 이름을 직접 적어야 한다. 코드가 복잡해지면 이런 방식은 유지보수가 ..
호이스팅(Hoisting)
·
Frontend/Javascript Essentials
자바스크립트를 배우다 보면 “선언이 끌어올려진다”는 말을 자주 듣게 된다.하지만 정확히 언제, 왜 이런 일이 벌어질까?이 글에서는 호이스팅이란 무엇인지, 평가 단계와의 관계, TDZ, var의 문제점,그리고 호이스팅이 왜 중요한 개념인지를 함께 살펴본다. 1. 호이스팅이란?호이스팅(Hoisting)은 자바스크립트 엔진이 코드를 실행하기 전에 변수와 함수 선언을 미리 메모리에 등록하는 현상을 말한다.이로 인해 선언문이 실제 코드 아래에 있어도 마치 위로 끌어올려진 것처럼 작동한다.(Hoist 의 사전적 의미는 "무언가를 들어올리거나 들어올리는 행위" 이다.)console.log(name); // undefined (에러 아님)var name = "Jay";자바스크립트 엔진 내부에서는 다음과 같은 순서로 동..
비동기 처리: CallBack → Promise → async/await
·
Frontend/Javascript Essentials
자바스크립트에서 비동기 처리를 처음 접하면 대부분 콜백 함수를 사용한다.하지만 전통적인 콜백 패턴에는 몇 가지 문제점이 있다. 1. 콜백 패턴의 문제점1. 콜백 헬 (Callback Hell)비동기 함수 내부에서 또 다른 비동기 작업을 수행해야 할 때, 콜백 함수가 중첩되며 코드 복잡도가 급격히 증가한다.getData((res1) => { getMoreData(res1, (res2) => { getExtraData(res2, (res3) => { console.log(res3); }); });});코드가 계속 오른쪽으로 들여쓰기되어 가독성이 나쁘다.또한 비동기 처리 결과를 함수 외부로 반환하거나 상위 스코프 변수에 할당하기 어렵다.2. 에러 처리의 어려움콜백 내부에서 발생한 에러는..
클로저 — 함수가 변수를 기억하는 방식
·
Frontend/Javascript Essentials
“A closure is the combination of a function and the lexical environment within which that function was declared.” 클로저란 함수와 그 함수가 선언된 렉시컬 환경의 조합이다. 자바스크립트에서 클로저는 단순히 “함수 안의 함수” 그 이상이다.클로저는 함수가 만들어질 당시의 스코프를 기억하는 메커니즘으로, 자바스크립트의 스코프와 실행 컨텍스트 구조를 이해하는 데 핵심적인 개념이다. 1. 렉시컬 스코프 (Lexical Scope)자바스크립트는 렉시컬 스코프(정적 스코프)를 따른다.즉, “함수가 어디서 호출되었는가”가 아니라 “어디서 정의되었는가”에 따라 상위 스코프가 결정된다.const x = 1;function foo(..
프로토타입 기반 상속
·
Frontend/Javascript Essentials
자바스크립트는 다른 언어(C++, Java 등)의 클래스 기반 상속(class-based inheritance)과 달리,프로토타입 기반 상속(prototype-based inheritance)을 사용한다.이는 객체가 다른 객체를 직접 상속받아 동작하는 방식으로, 자바스크립트의 유연한 객체 지향 특성을 잘 보여준다. 1. 프로토타입 기반 상속이란?모든 객체는 내부적으로 *[[Prototype]](또는 **__proto__)이라는 숨겨진 참조를 가진다.이 참조를 통해 상위 객체(프로토타입 객체)의 속성과 메서드를 공유받는다. 즉, 객체 간 직접적인 상속 관계가 형성되는 것이다. ES6의 class와 extends 문법은 이러한 프로토타입 상속을 문법적으로 단순화한 표현(syntactic sugar)이다. *..
이벤트 루프
·
Frontend/Javascript Essentials
1. 이벤트 루프이벤트 루프(브라우저에 내장되어 있는 기능)는 자바스크립트의 비동기 처리 메커니즘을 관리하는 핵심 엔진으로,실행 컨텍스트가 담긴 콜 스택(Call Stack) 과, 나중에 실행될 (매크로) 태스크 큐(task Queue) 및 마이크로태스크 큐(Microtask Queue) 를 조율하는 역할을 한다. 자바스크립트는 단일 스레드 언어이기 때문에, 한 번에 하나의 작업만 수행할 수 있는데, 실행할 함수가 생기면 콜 스택에 쌓이고, 스택의 맨 위에 있는 함수부터 순차적으로 실행되는 것이다. 이때 비동기 작업(예: setTimeout, fetch)은 바로 실행되지 않고, 백그라운드에서 완료된 후 해당 콜백이 큐(매크로 또는 마이크로 태스크큐)에 등록된다. 이벤트 루프는 콜 스택이 비어 있는지 계속..