js/작동방식5 node 비동기 작업의 실행원리 (process.nextTick) node는 기본적으로 단일 스레드로 작동된다.그러므로 setTimeout과 같은 비동기 호출이 들어왔을때 지정된 시간이 지난다면메인 스레드의 실행큐에 전달돼 현재작업 이후에 실행된다.setTimeout(() => { console.log(2);}, 1000);while (true) console.log(1); 위와 같은 코드는,node 메인 스레드의 비동기작업을 담당하는 queue에 담겨 대기하다가 1초뒤에 실행 queue로 옮겨지겠지만,이미 실행 queue는 독점하고있는 "console.log(1)" 라는 실행자원이 있기때문에 우리가 2라는 숫자를 볼 일은 없을것임즉 setTimeout을 쓴다고 바로 실행되지않고 실행요청을 하는것이라고 이해하는게 좋을듯 아래 소스코드를 실행하면 어떻게될까?setTim.. 2024. 12. 5. js 일급객체(함수) 일급객체의 조건 - 무명의 리터럴로 생성할 수 있음 - 변수나 자료구조(객체,배열 등)에 저장할 수 있음 - 함수의 매개변수에 전달할 수 있음 - 함수의 반환값으로 사용할 수 있음 자바스크립트의 함수는 위의 조건에 부합하므로 일급 객체이며객체와 동일하게 함수를 사용할 수 있음함수의 프로퍼티 어트리뷰트const getSum = function(a,b){ return a+b;};Object.getOwnPropertyDescriptors(getSum);// 이미지 참고프로퍼티 어트리뷰트는 위와 같이 존재함 2023. 2. 15. js 실행컨텍스트 소스코드의 타입 ㄱ. 전역코드 - 최상위 코드인 전역 스코프를 생성 후, 전역 객체와 연결 - 이를 위해 전역 코드가 평가되면 전역 실행 컨텍스트가 생성됨 ㄴ. 함수코드 - 함수마다의 지역 스코프를 생성하고, 지역변수|매개변수|arguments 객체 등을 관리함 - 생성한 지역 스코프를 전역 스코프에서 시작하는 스코프 체인의 일원으로 연결해야 함 - 이를 위해 함수 코드가 평가되면 함수 실행 컨텍스트가 생성됨 ㄷ. eval코드 (빌트인 전역 함수인 eval 함수에 인수로 전달되어 실행되는 소스코드) - strict mode에서 자시만의 독자적인 스코프를 생성함 - 이를 위해 eval 코드가 평가되면 eval 실행 컨텍스트가 생성됨 ㄹ. 모듈코드 - 모듈별로 독립적인 모듈 스코프를 생성 -.. 2022. 12. 28. js node, npm, cli node- 자바스크립트를 서버에서도 사용할 수 있게 만든 프로그램- 서버사이드 스크립트 언어가 아닌 프로그램(환경)이다- 자바스크립트 위에서 동작하는 런타임이다런타임- 특정언어로 만든 프로그램을 실행할 수 있는 환경- 따라서 노드는 자바스크립트 프로그램을 컴퓨터에서 실행할 수 있게 하는 런타임이다npm(node package manager)- 자바스크립트 코드 패키지를 모아놓은 저장소cli- 프로젝트를 빠르게 구성하고, 빌드, 디플로이 할 수 있게 도와주는 도구 2022. 1. 15. js hoisting varconsole.log(a);a=4;var a; 위 코드상에선 a가 선언되지도 않아 에러가 나야하지만 var를 이용하면 undefined 가 뜬다(변수는 선언됐단 뜻) 변수를 어디에 선언하든 상관없이 끌어올려 선언시키는 hoisting이라는 것 때문에 소스코드 첫 번째 줄에서도 a를 참조할 수 있다. hoisting으로 인해 편하게 소스를 작성할 수 있어서 좋아보이지만 단점도 확실히 존재함 1. if문 내의 scope var는 let, const와 달리 if문에서 소스 코드를 작성할 시 전역변수와 같은 scope를 지님 그래서 scope관리에 더 신경써야 한다. 2. hoisting var는 let, const와 같이 hoisting이 되지만 let, c.. 2022. 1. 14. 이전 1 다음