on
Node.js 학습_자바스크립트 문법(호출 스택 / 이벤트 루프 / const, let...
Node.js 학습_자바스크립트 문법(호출 스택 / 이벤트 루프 / const, let...
728x90
반응형
# 자바스크립트_호출 스택(함수의 호출, 자료구조의 스택)
호출 스택 : 자바스크립트가 동기 (순서대로 실행)적으로 어떻게 실행되는지 파악할때 사용.
function first() { second(); console.log('첫 번째'); } function second() { third(); console.log('두 번째'); } function third() { console.log('세 번째'); } first(); => 실행 순서 세 번째 두 번째 첫 번째
스택이란 밑에서부터 쌓여서, 위에서 부터 꺼내는 것. (예) 프링글스ㅋㅋ)
Anonymous은 가상의 전역 컨텍스트(항상 있다고 생각하는게 좋음)
함수 호출 순서대로 쌓이고, 역순으로 실행
함수 실행이 완료되면 스택에서 빠진다.
LIFO 구조라서 스택이라고 불림.
# 자바스크립트_이벤트 루프
funtion run() { console.log('3초 후 실행'); } console.log('시작'); setTimeout(run, 3000); console.log('끝'); => 실행 순서 시작 끝 3초 후 실행
호출 스택만으로는 설명이 안됨, 호출 스택과 이벤트 루프로 설명 가능. (호출 스택 / 백그라운드 / 테스크 큐)
setTimeout은 비동기 함수로 백그라운드에 타이머(run, 3초) 보냄. (setTimeout의 경우 0초라도 무조건 백그라운드에 가야함)
백그라운드에 있으면 동시에 실행 가능.
백그라운드가 먼저 끝난다고 하더라도 호출 스택이 먼저 처리된다.
이벤트 루프 : 호출 스택이 비어있는 경우, 테스크 큐에서 함수들 하나하나를 끌어와서 실행 해준다. (이때 백그라운드는 비워져야 한다.)
Promise then / catch / process.nextTick의 경우 테스크 큐에서 setTimeout 등 보다 먼저 실행(새치기) 됨
# const, let
ES2015 이전에는 var로 변수를 선언.
ES2015부터는 const와 let이 대체
가장 큰 차이점 : 블록 스코프(var은 함수 스코프)
블록 스코프(중괄호, { } )
if (true) { var x = 3; } console.log(x); // 3 => var의 경우 블록 스코프를 무시, 블록 바깥에서도 var에 접근 가능 => var도 function 안에 있을 경우에는 바깥에서 접근 불가(= 함수 스코프) if (true) { const y = 3; } console.log(y); // Uncaught ReferenceError: y is not defined => 블록 스코프를 존중. 블록 바깥에서 const 접근 불가
const에는 대입 연산자(=)을 한 번만 사용 가능. (가능하면 const 사용, 값 바꿀일 있으면 그때 let 사용)
const a = 3; a = '5'; // 에러 const b = {name : 'zerocho'}; b.name = 'nerocho'; let c = 5; c = 3; c = 10; // 가능. 하지만, 생각보다 let 쓸일 많지 않음(값 바꿀일 있는경우 사용)
# 템플릿 문자열, 객체 리터럴 (편의사항)
기존 문법 var won = 1000; var result = '이 과자는 ' + won + '원입니다.'; / 이 과자는 1000원입니다. => 공란 넣어줘야 띄어쓰기 가능. 최신 문법 const result = `이 과자는 ${won}원입니다.`; => 변수를 ${}로 해줘서 띄어쓰기 가능하도록 해줌.(` ` 는 ~표에 있는것) 이를 템플릿 문자열, 백틱 문자열 이라고함.(편의사항)
태그드 템플릿 리터럴 : 백틱( ` )이용한 함수 호출
function a() {} 기존 문법 a(); 최신 문법 a``; // 백틱(`) 사용하여 함수 호출 가능.
728x90
반응형
from http://dlagusgh1.tistory.com/830 by ccl(A) rewrite - 2021-09-30 23:27:16