1. 자바스크립트 메모리 관리
자바스크립트는 객체가 생성되었을 때 자동으로 메모리를 할당하고 더 이상 필요하지 않을 때 자동으로 해제함
2. 가비지 컬렉션
- Mark and Sweep 알고리즘을 사용하여 메모리를 정리함 (도달할 수 있는지를 기준으로 메모리를 정리)
2. 콜스택과 힙
1. 콜스택
- 원시타입 데이터 저장
- 실행 컨텍스트를 통해 변수 식별자 저장, 스코프체인 및 this관리, 코드 실행순서 관리 등을 수행함
- 더이상 참조되지 않는 데이터는 가비지 컬렉션에 의해 적절한 시점에서 메모리 해제됨
2. 힙
- 참조타입 데이터 저장, 메모리 할당이 일어남
- 구조화 되어있지 않음
3. 메모리 누수가 일어나는 패턴
- 전역변수를 너무 많이 만들경우
- 사용이 완료된 이벤트리스너를 제거하지 않고 계속 addEventListener만 될 경우
- setInterval() 함수를 사용했다가 해제하지 않은 경우
- 사용하지 않지만 콘솔로 출력하는 경우
- DOM에서 removeChild()되었지만 여전히 해당 node를 querySelector등으로 사용하고 있는 경우
3. 엄격모드
- ECMAScript5에서 등장한 엄격모드는 자바스크립트 코드에 더욱 엄격한 오류 검사를 적용해 줌
- 부분적으로 엄격모드를 적용할 수 있음
1. 선언
스크립트의 시작 혹은 함수의 시작 부분에 "use strict"(또는 'use strict')를 선언하면 strict 모드로 코드를 작성 할 수 있습니다.
"use strict";
var v = "Hi! I'm a strict mode script!";
function strict(){
// Function-level strict mode syntax
'use strict';
function nested() { return "And so am I!"; }
return "Hi! I'm a strict mode function! " + nested();
}
function notStrict() { return "I'm not strict."; }
2. 엄격모드 문법
1. 변수
- 선언되지 않은 변수나 객체를 사용할 수 없음
- eval() 함수 내에서 선언된 변수는 외부에서 사용할 수 없음
2. 프로퍼티
- 읽기 전용 프로퍼티에는 대입할 수 없음
- 한 프로퍼티를 여러 번 정의할 수 없음
3. 함수
4. 매개변수
- 매개변수의 이름이 중복되어서는 안됨.
- arguments객체의 요소 값을 변경할 수 없음
5. 문자열
- 문자열 "eval"과 "arguments"는 사용할 수 없음
6. 8진수
7. this
- this포인터가 가르키는 값이 null이나 undefined인 경우 전역 객체로 변환되지 않음
8. delete
9. with
10. 예약어
- 다음 예약어들은 사용할 수 없음.
implements, interface, let, package, private, protected, public, static, yield
4. 즉시실행함수(IIFE)
- 정의되지마자 즉시 실행되는 함수, 보통 익명함수를 사용
- 소괄호에 함수를 감싸서 실행하는 문법을 사용함
(function () {
console.log("IIFE");
})();
// 화살표 함수로도 사용 가능하다
(() => {
console.log("IIFE");
})();
1. 사용이유
- 필요없는 전역변수의 생성을 줄일 수 있다.
- private한 변수를 만들 수 있다.
2. 활용법
- 단 한번의 사용이 필요한 함수 ex. 변수를 초기화하는 함수
- 자바스크립트 모듈