Javascript 개념 정리


알고리즘 공부를 하며 부족했던 개념을 다시 정리

함수 표현식의 장점

: AirBnb의 스타일가이드에서는 함수 표현식을 쓰길 권함.

스코프

  • 변수의 유효범위.
  • 스코프는 함수 호출이 아닌 함수 선언시 생성. -> 렉시컬 스코핑(Lexical Scoping), 정적 스코핑
  • C-family language는 블록레벨 스코프. Js는 함수 레벨 스코프
var name = 'zero';
function log() {
  console.log(name);
}

function wrapper() {
  name = 'nero'; // 1번
  var name = 'nero'; // 2번
  log();
}
wrapper();

1번과 2번일때 결과가 다름.

실행 컨텍스트

실행 컨텍스트는 실행 가능한 코드가 실행되기 위해 필요한 환경. 생성된 실행 컨텍스트는 실행 컨텍스트 스택에 쌓임. 실행 컨텍스트 스택은 LIFO(후입선출) 의 방식으로 관리됨

  • 실행 컨텍스트는 3가지 객체를 가짐.
    • Variable Object
      • 변수
      • 매개변수(parameter)와 인수 정보(arguments)
      • 함수 선언(함수 표현식은 제외)
    • Scope Chain
    • this
  1. 전역 컨텍스트 생성 -> 콜스택(실행 컨텍스트 스택)에 쌓임
  2. 함수 호출 시마다 컨텍스트 생성 -> 콜스택(실행 컨텍스트 스택)에 쌓임
  3. 컨텍스트 생성 시 컨텍스트 안에 변수객체(arguments, variable), scope chain, this가 생성
  4. 컨텍스트 생성 후 함수실행. 사용되는 변수들은 변수 객체 안에서 값을 찾고, 없다면 스코프 체인을 따라 올라가며 찾음
  5. 함수 실행이 마무리되면 해당 컨텍스트는 소멸.(클로저 제외) -> 콜스택(실행 컨텍스트 스택)에서 추출
  6. 페이지가 종료되면 전역 컨텍스트가 소멸 -> 콜스택(실행 컨텍스트 스택)에서 추출

활성객체

  • 실행 컨텍스트가 생성되면 자바스크립트 엔진은 해당 컨텍스트에서 실행에 필요한 여러가지 정보를 담을 객체를 생성한다. 이를 활성객체라 한다.
  • 객체가 사용할 매개변수, 사용자가 정의한 변수 및 객체를 저장 한다.

클로저

클로저는 자신이 생성될 때의 환경(Lexical environment)을 기억하는 함수다.
실행 컨텍스트의 관점에 설명하면, 내부함수가 유효한 상태에서 외부함수가 종료하여 외부함수의 실행 컨텍스트가 반환되어도, 외부함수 실행 컨텍스트 내의 활성 객체(Activation object)(변수, 함수 선언 등의 정보를 가지고 있다)는 내부함수에 의해 참조되는 한 유효하여 내부함수가 스코프 체인을 통해 참조할 수 있는 것을 의미한다.

용도 :

  • 상태유지
  • 전역변수 사용억제
  • 정보은닉(private 키워드 흉내)
//// 1번 
var arr = [];

for (var i = 0; i < 5; i++) {
  arr[i] = function () {
    return i;
  };
}

for (var j = 0; j < arr.length; j++) {
  console.log(arr[j]());
}

//// 2번
var arr = [];

for (var i = 0; i < 5; i++){
  arr[i] = (function (id) { 
    return function () {
      return id; 
    };
  }(i)); 
}

for (var j = 0; j < arr.length; j++) {
  console.log(arr[j]());
}

//// 3번
const arr = [];

for (let i = 0; i < 5; i++) {
  arr[i] = function () {
    return i;
  };
}

for (let i = 0; i < arr.length; i++) {
  console.log(arr[i]());
}

1번 : 5 가 5번 출력 2번,3번 : 1,2,3,4,5 가 출력





2023

Flutter 맛보기 1

3 분 소요

직방 기술지원팀 기술공유 세미나 중 플러터를 소개한 내용입니다

Back to Top ↑

2022

Back to Top ↑

2019

[Tutorial] Storybook과 Bit을 활용한 UI 컴포넌트 관리(Workflow)

1 분 소요

회사에서 프론트엔드 개발원칙을 SFC(Single File Component)에서 UI 컴포넌트를 기준으로 CDD(Component Driven Development)를 진행하려고 한다. 그래서 체계적으로 관리하기위해 Storybook과 Bit을 도입해보고자 한다. 각각의 역할은 ...

[Workflow] 프론트엔드 개발조직을 위한 워크플로 설계

2 분 소요

작성 배경 회사의 작업구조를 페이지 중심 개발에서 UI 컴포넌트 중심 개발로 변경하면서 Workflow를 개선할만한 환경을 구성해야했다. 폐쇄망 기반에서 개발자간 UI 명세서 역할을 할 수 있는 Storybook과 그것을 공유할 Verdaccio라는 구축형 NPM Pri...

[ESlint & Prettier] 개발 관습 설정 in Visual Studio

1 분 소요

회사 프로젝트를 작업하기 전 프론트엔드 개발자들 간의 코드 규칙을 Eslint와 Prettier 설정을 맞춰 관리해가는 방향을 정했다. 아직 협업을 할 경우는 없지만 미래에 인수인계 받거나 협업을 진행할 경우 코드관습이 달라 고생할 경우를 대비하기로 했다. 설정은 작업을 진행하며 ...

[CodingTest] 2019-10-26 SQL문제

최대 1 분 소요

공부겸 코딩테스트 사이트에서 토요일 오전 10시에 백엔드 포지션 테스트를 해준다기에 참여해봤다. SQL문제가 나왔는데 더 좋은 답이 있는것 같아 나중에 기록해두고 수정해보기로 한다.

[CodingTest] 피보나치 수열

1 분 소요

문제 : 피보나치 수열 제 1항부터 입력한 자연수(N)까지의 피보나치 수열 항들의 합을 구하여라.

[Syntax] 새로 알게된 파이썬 문법 정리

최대 1 분 소요

chaning comparison 파이썬은 chaning comparison이라는 신기한 문법이 있다. 참고 if a < b and b < c : (...) 라는 구문이 if a < b < c : (...) 으로 연산된다. 직관적인 문법이 인상적. ...

[DataType] Map & Set

최대 1 분 소요

Set vs Array - 관련기사 Set 유일값들의 배열이 필요할때(distinct) 집합의 개념이 필요할때(차집합, 교집합 등등 자체 메서드들이 많음.) index가 필요 없을때 Array에서 중복값을 없앨때 => ...

Back to Top ↑

2018

SGIS-shpToGeojson

1 분 소요

SGIS에서 받은 지도데이터(.shp)를 geojson으로 변경하는 작업 내용

Back to Top ↑