JavaScript

실행 컨택스트와 스코프, 콜 스택과 힙의 사전 지식이 필요하다. 메모리 누수 Javascript 메모리는 원시값을 저장하는 콜 스택 메모리와 참조 값을 저장하는 힙 메모리로 구분된다. 실행 컨텍스트(GEC, FEC)가 콜 스택에 쌓이게 되면 참조 값이 있다면 힙 메모리에 데이터가 쌓이게 됩니다. 실행 컨텍스트가 차례대로 제거 된다면, 그 순서에 맞게 힙 메모리에 쌓인 데이터는 더이상 참조되지 않으므로 필요가 없어집니다. 이때 계속해서 힙 메모리에 불필요한 데이터가 메모리를 차지하게되면 메모리 누수로 인해 성능이 떨어지게됩니다. 메모리 누수? 사용하지 않는 메모리를 해제하지 못하여 계속 메모리를 점유하는 것 종합하자면, 가비지 컬렉터가 더이상 참조되지 않는 객체를 인지하고, 불필요한 메모리를 해제한다. 가..
1. 정의 자바스크립트 엔진이 자바스크립트를 실행할 때 원시 타입 및 참조 타입을 저장하는 메모리 구조로 콜 스택과 힙을 갖는다. 1-1 콜스택 원시타입 값과 함수 호출의 실행 컨텍스트(Execution Context)를 저장하는 곳이다. 1-2 힙(메모리 힙) 객체, 배열, 함수와 같이 크기가 동적으로 변할 수 있는 참조타입 값을 저장하는 곳이다. 2. 동작 원리 let a = 10; let b = 35; let arr = []; function func() { const c = a + b; const obj = { d: c }; return obj; } let o = func(); 위 코드를 콜 스택과 힙의 동작으로 확인해 보자. 제일 처음으로 GEC(Global Execution Context, 글..
1. 즉시 실행 함수 표현식의 조건 IIFE는 2가지 조건을 갖는다. 즉시 실행해야 한다. 함수 표현식이어야 한다. ➡ 함수 선언문이 아닌 즉, 함수 표현식을 즉시 실행하는 것을 의미하며 해당 함수는 익명함수와 기명함수 모두 가능하다. (function(){ console.log('IIFE'); })(); 위의 코드에서 익명함수로 표현된 함수를 괄호로 감쌌는데, 괄호를 사용하지 않고 작성하게 되면 함수 표현식이 아니라 함수 선언문이 되기 때문에 괄호를 이용해 함수 표현식으로 만든 것이다. 2. 3가지 즉시 실행 함수 표현식 문법과 화살 표현식 IIFE는 3가지 형태로 표현할 수 있다. 2-1 논리 부정 연산자(!) 논리 부정 연산자를 이용해 IIFE를 구현할 수 있다. 이렇게 하면 함수는 undefine..
var, let, const 모두 변수를 선언하는 키워드이다. let과 const는 ES2015(ES6)에서 등장했으며 여러가지 다른 특성을 갖는다. var let const 유효 범위(스코프 범위) Function Scope Block Scope Block Scope 재할당 가능 가능 불가능 재선언 가능 불가능 불가능 1. 스코프 규칙 스코프에 관한 글 var는 함수 스코프를 갖는다. 하지만, let과 const는 블록 스코프를 갖는다. 1-1 var var 키워드는 함수 스코프(Function Scope)이다. 이는 생성된 함수 스코프 내에서만 사용할 수 있으며, 외부에 선언된 경우는 전역 범위를 갖는다. var age = 24; function foo () { var name = "JuHyeon" ..
네이티브 객체 (Native Object) ECMAScript(자바스크립트 언어 규약) 명세에서 의미론적인 부분으로 완전히 정의해 놓은 객체들이다. 네이티브 객체는 애플리케이션의 환경과 관계없이 언제나 사용할 수 있다. 값 속성 : NaN, Null, undefined, globalThis 함수 속성 : eval(), parseInt(), isNaN() ➡ 객체에 붙지 않고 전역으로 호출하는 함수 기초 객체(fundamental obj) : Object, Boolean, Function, Symbol ➡ 모든 객체의 기본 객체 오류 객체 : Error, SyntaxError 숫자/날짜 객체 : Number, Math, Date 텍스트 처리 객체 : String, RegExp 인덱스 콜렉션 : 인덱스값으로..
클로저란? 클로저는 함수가 속한 렉시컬 환경을 기억해서 함수가 렉스컬 스코프 밖에서 실행될 때에도 함수가 속한 스코프에 접근할 수 있게 하는 기능을 말한다. function foo() { var a = 2; function bar(){ console.log(a); // 2 } return bar; } var func = foo(); func(); GC(Garbage Collector)가 foo()의 참조를 없앨 것 같지만, bar()가 해당 스코프에 있는 a를 참조하기 때문에 없애지 않는다. 그러므로 스코프 외부에서 bar()가 실행되면 스코프를 기억하고 있기에 2가 출력된다. 이때, 클로저는 bar()에서 발생하며, 이는 스코프 외부에서 foo()의 스코프안에 있는 bar()를 참조하기 때문이다. 다시..
58청춘
'JavaScript' 카테고리의 글 목록 (9 Page)