[3/20] 자바스크립트 메모리 관리 & 콜스택/힙 & 엄격모드 & 즉시실행함수

릿·2023년 3월 20일
0

CS스터디

목록 보기
13/18

1. 자바스크립트 메모리 관리

자바스크립트는 객체가 생성되었을 때 자동으로 메모리를 할당하고 더 이상 필요하지 않을 때 자동으로 해제함

2. 가비지 컬렉션

  • Mark and Sweep 알고리즘을 사용하여 메모리를 정리함 (도달할 수 있는지를 기준으로 메모리를 정리)

2. 콜스택과 힙

1. 콜스택

  • 원시타입 데이터 저장
  • 실행 컨텍스트를 통해 변수 식별자 저장, 스코프체인 및 this관리, 코드 실행순서 관리 등을 수행함
  • 더이상 참조되지 않는 데이터는 가비지 컬렉션에 의해 적절한 시점에서 메모리 해제됨

2. 힙

  • 참조타입 데이터 저장, 메모리 할당이 일어남
  • 구조화 되어있지 않음

3. 메모리 누수가 일어나는 패턴

  1. 전역변수를 너무 많이 만들경우
  2. 사용이 완료된 이벤트리스너를 제거하지 않고 계속 addEventListener만 될 경우
  3. setInterval() 함수를 사용했다가 해제하지 않은 경우
  4. 사용하지 않지만 콘솔로 출력하는 경우
  5. DOM에서 removeChild()되었지만 여전히 해당 node를 querySelector등으로 사용하고 있는 경우

3. 엄격모드

  • ECMAScript5에서 등장한 엄격모드는 자바스크립트 코드에 더욱 엄격한 오류 검사를 적용해 줌
  • 부분적으로 엄격모드를 적용할 수 있음

1. 선언

스크립트의 시작 혹은 함수의 시작 부분에 "use strict"(또는 'use strict')를 선언하면 strict 모드로 코드를 작성 할 수 있습니다.

  • 스크립트에서 strict선언
"use strict";
var v = "Hi!  I'm a strict mode script!";
  • 함수에서 strict 선언
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진수

  • 숫자 리터럴에 8진수 값을 대입할 수 없음

7. this

  • this포인터가 가르키는 값이 null이나 undefined인 경우 전역 객체로 변환되지 않음

8. delete

  • delete키워드를 사용할 수 없음.

9. with

  • with문을 사용할 수 없음

10. 예약어

  • 다음 예약어들은 사용할 수 없음.
    implements, interface, let, package, private, protected, public, static, yield

4. 즉시실행함수(IIFE)

  • 정의되지마자 즉시 실행되는 함수, 보통 익명함수를 사용
  • 소괄호에 함수를 감싸서 실행하는 문법을 사용함
(function () {
    console.log("IIFE");
})();

// 화살표 함수로도 사용 가능하다
(() => {
    console.log("IIFE");
})();

1. 사용이유

  1. 필요없는 전역변수의 생성을 줄일 수 있다.
  2. private한 변수를 만들 수 있다.

2. 활용법

  1. 단 한번의 사용이 필요한 함수 ex. 변수를 초기화하는 함수
  2. 자바스크립트 모듈
profile
항상 재밌는 뭔가를 찾고 있는 프론트엔드 개발자

0개의 댓글