=> 원래 자바스크립트에는 없었는데, 노드가 제공하는 기능들이다
=> 아래와 같이 node 의 global 을 실행하면 무언가가 나온다.
(브라우저 에서는 window 여기서는 global 이라는 단어를 씀,
혼용하지 않기 위해 브라우저와 노드 모두에서 globalThis 라는 명령어로 통일 됨)
(또한 window 명령어와 마찬가지로 global. 을 써도되고 안써도 됨)
(그동안 우리가 쓰던 require 도 global 안에 있는 거지만 그냥 require 로 쓰는 것이다.)
(우리가 많이 쓰는 console.log 또한 global 을 생략한 것이다.)
(globalA에서 global.message; 값을 넣어두면 다른 파일에서도 globalB와 같이 사용가능하다.)
(좋은 건 아니다. 파일이 수백개 넘어가면 어디서 global 을 선언했는지 알 수 없다. 모듈로 만들자!!)
(엄밀히 따지면 다르지만 터미널, 쉘 가 같은 용어이다.)
(console.log == 문자열 프린트
console.dir == 객체를 로깅할 때는 log 보다는 dir 가 좋다.
console.time == 시작 시간
console.timeEnd == 시작시간과 이 코드가 실행된 시간의 차이를 알려줌
console.trace == 함수 안에서 쓰면 호출 스택을 보여준다.)
(위와 같이 코드 시간을 잴때 필요)
(위와 같은 식으로 결과가 나온다.)
(계속 실행중이라 아래부분이 깨져 보이지만 clearInterval(hello)를 통해 종료 했다.
또한 setTimer 에서도 지정된 시간이 지나기 전에 clearInterval을 통해 종료 할 수 있다.
다만 이 경우 취소를 하려면 변수에 대입을 하고 그 변수를 취소 해야 한다.)
(setTimeout에서 시간을 0으로 설정해 준 것과 동일하다.)
( 차이가 있다면 실행순서에 있다.
setImmediate를 그냥 쓰자.
타이머는 안에 들어있는 함수가 background 로 가면 동시에 실행될 수도 있다. (setImmediate로 코드들을 동시에 실행되도록 보낼 수 있다.)
=> 따라서 setImmediate, setTimeout, setInterval 이 들은 그 안의 함수들을 background로 보내는 대표적인 비동기 코드라고 볼 수 있다.
(setImmediate의 경우 바로 실행되기는 하지만, 이 과정이 background로 가서 task queue로 갔다가 eventLoop에 의해서 호출 스택으로 가는 과정이라는 것이 있기 때문에, 중간에 취소 할 수도 있는 것이다.)
(위는 예시 코드와 결과이다. 실제로 immediate2가 실행되지 않은 것을 확인 가능하며, 또한 2.5 초 후에는 timeout2와 interval 을 중지 시키며 3초가 지나야 실행되는 timeout2는 실행되지 않은 것을 확인 가능하다.)