setTimeout 은 js 지만 js 가 아니다?

이상돈·2024년 2월 27일
0

자바스크립트가 아니야?

객체가 함수를 가지고 있으면 해당 함수를 '메소드' 라고 부른다.

잘 생각해보면 드물지 않게 사용하는 setTimeout, console, fetch, localstorage 등은 메소드 라고 부르지 않았다.

console.log() 에 대한 기억

브라우저가 읽은 자바스크립트니까 브라우저 콘솔에 노출되고, 서버에서 실행된 자바스크립트니까 터미널에서 노출되는게 왜인지 몰라도 나에게는 무척 자연스러웠다.

하지만 팩트를 알고 보면 수학문제 n번 째 줄에는 몇개의 바둑알이 존재할것인가 에 대하여 직접 그려가며 맞추는식이 아닌 나름의 사정이 있던 것.

내가 알던 매서드가 사실은 api 였던 건에 대하여

그렇다. 자바스크립트인줄 알았던 많은 메서드가 사실은 api 였던것.
개발자는 자바스크립트의 기능인 console.log 나 setTimeout 을 실행 시키는 것이 아니라 그저 실행환경인 브라우저에게 부탁하고 있던 것이었다.

더 깊게 파고 들어가면 이벤트 루프 뭐시기 까지도 들어갈 수 있겠지만 패스하고,
(내 웹개발 지식은 어떻게 이루어져 있는가 > 랜덤한 인도사람이 올린 유트브 영상)

정리하자면 어떤 소프트웨어적인 기능을 이용하기 위해 자바스크립트로 코드를 작성했던것 뿐이다.

바로 이점이 클라이언트 환경에서는 브라우저 개발자도구에, 노드환경에서는 터미널에 로그가 찍이는 이유가 되는것이다.

전역객체

우리가 console.log 와 같이 객체나 함수의 임포트없이 사용할수 있었던 이유가 바로 이 api 를 가진 녀석이 전역객체로써 생략을 허용하기 때문이다.

eg )

console.log = window.console.log
document = window.document
// node 에선 window 가 global

profile
fedev ?

0개의 댓글