호이스팅 🤔 자바스크립트 코드를 작성하다 보면 호이스팅(Hoisting)이라는 신기한 경험을 할 때가 있습니다. 호이스팅이란, 변수 선언문이나 함수 정의문이 코드의 위로 끌어올려진 것처럼 동작하는 것을 말합니다. Hoisting is a JavaScript mechanism where variables and function declarations are moved to the top of their scope before code execution. 자바스크립트 엔진은 코드를 실행하기 전, 필요한 정보(변수, 함수 식별자)를 메모리에 설정합니다. 이 과정에서 식별자만 저장하는 변수와 달리 함수는 참조하고 있는 본체까지 함께 저장합니다. ES6에서 추가된 let과 const로 생성된 변수는 초기화되지 않..
단축 평가 🤔 단축 평가(Short-circuit Evaluation)는 연산의 결과가 확정된 경우, 남아 있는 연산을 생략하는 것을 말합니다. 논리 연산에서 주로 확인할 수 있는데, 대표적인 논리 연산인 논리곱(&&)과 논리합(||)을 통해 알아 보겠습니다. console.log('cat' || 'dog'); // cat console.log('cat' && 'dog'); // dog console.log(false || 'apple'); // apple console.log(false && 'apple'); // false 이처럼 논리 연산은 좌항에서 우항으로 진행되기 때문에, 불필요한 과정은 생략되고 최종적으로 평가된 피연산자를 결과로 반환합니다. 또한 자바스크립트는 연산 결과를 결정하는 피연산자의..
리터럴(Literal) 🤔 리터럴(Literal)은 사람이 이해할 수 있는 문자 또는 약속된 기호를 통해 값을 생성하는 표기법(Notation)입니다. 현존하는 거의 모든 프로그래밍 언어에서 사용할 수 있으며, 보통 변수나 상수를 초기화할 때 사용합니다. // Literal: 7, 'hello', { name: 'NoHack' } const foo = 7; const bar = 'hello'; const obj = { name: 'NoHack' }; 사람이 이해할 수 있는 문자나 기호를 사용함으로써, 자바스크립트 엔진은 런타임 시점에 메모리에 값을 생성합니다. 배열([1, 2, 3])과 함수(function() {}), 그리고 정규 표현식(/[a-z]+/g) 역시 리터럴에 해당 됩니다.