목록전체 글 (97)
시작하는 중
https://developer.mozilla.org/ko/docs/Web/JavaScript/Closures 클로저 - JavaScript | MDN 클로저는 함수와 함수가 선언된 어휘적 환경의 조합이다. 클로저를 이해하려면 자바스크립트가 어떻게 변수의 유효범위를 지정하는지(Lexical scoping)를 먼저 이해해야 한다. developer.mozilla.org ? 어휘적 환경이란, 함수가 실행될 때, 함수에서 사용되는 변수를 캡처하여 참조할 수 있는 환경을 말한다. "캡처"라는 것은 그 당시의 변수를 참조 가능한 것 + 그리고 언제든지 그 변수를 참조 가능하기에 캡처라고 하는 것이다. 즉, 내가 실행 중인 함수에서 선언되지 않은 변수더라도, 함수는 변수를 참조할 수 있다는 것이다. const sa..
이전 글에서 JS의 비동기 처리에 대해 정리했다. https://mystacks.tistory.com/71 Javascript의 비동기 처리 JS 그 자체는 싱글 스레드 언어라고 하지만, 우리는 흔히들 아는 Promise나 axios, setTimeout등을 통해 비동기 처리를 하고 있다. 어떻게 할 수 있을까? JS의 런타임 환경 JS의 비동기 로직을 알아보기 위 mystacks.tistory.com 하지만, 나는 JS가 완전한 비동기일까 궁금해서 더 파보기로 했다. 처음 생긴 궁금증은 Task 큐에 대기 중인 함수가 있고, 콜 스택이 비어있는 상황에서 JS의 코드에서 다음 함수가 실행될 타이밍이라고 하면, 누가 우선일까? 다음의 예시를 보면, setTimeout(() => console.log("Ti..

JS 그 자체는 싱글 스레드 언어라고 하지만, 우리는 흔히들 아는 Promise나 axios, setTimeout등을 통해 비동기 처리를 하고 있다. 어떻게 할 수 있을까? JS의 런타임 환경 JS의 비동기 로직을 알아보기 위해선 JS의 런타임 환경을 봐야한다. 런타임 환경이라는 것은 언어가 실행되는 환경이다. js는 보통 브라우저에서 많이 실행되며 node.js라는 환경에서도 실행된다. 나는 브라우저를 통해 살펴보려고 한다. 브라우저는 기본적으로 JS를 구동할 수 있는 환경을 가지고 있다. 지금 크롬이라면 F12만 눌러봐도, 다른 브라우저라면 개발자 도구의 콘솔창에서 console.log("Hi!"); 를 통해 곧바로 JS 코드를 동작시킬 수 있다. 이렇듯 언어를 실행시킬 수 있는 환경을 런타임 환경이..

JS는 그 자체는 싱글 스레드 언어이다. 흔히들 검색하면 나오는 그런 그림을 생각하지 않고 JS 엔진 그 자체만 본다면 JS에는 stack과 heap 메모리만 존재한다. 힙은 객체가 할당되는 영역이니까 이벤트 루프와 런타임에선 생각하지 않아도 되어 제외한다면, 스택 하나만 남는다. 스택은 후입선출의 구조를 지녔으며 스택에 쌓이는 것은 호출되는 함수이다. 함수가 실행될 수 영역은 스택 하나이니까 싱글스레드 언어라고 하는 것이다. function funcA() { console.log("2 step"); funcB(); console.log("4 step"); }; function funcB() { console.log("3 step"); }; console.log("1 step"); funcA(); 이 코..