REPL 사용하기
자바스크립트는 스크립트 언어이므로 미리 컴파일을 하지 않아도 즉석에서 코드를 실행할 수 있음
- Read - 코드 읽고
- Eval - 해석하고
- Print - 결과물 반환
- Loop - 반복
터미널에서 node를 실행시키고 위의 REPL 사용이 가능함
V8 엔진 동작 방식의 기본 원리
- 엔진이 스크립트를 읽음(파싱)
- 읽어 들인 스크립트를 기계어로 전환(컴파일)
- 기계어로 전환된 코드가 실행됨. 기계어로 전환 되었기 때문에 실행 속도가 빠름
모듈로 만들기
const odd = '홀수'; const even = '짝수'; module.exports = { odd, even, };
const { odd, even } = require('./var'); function checkOddOrEven(num) { if (num % 2) { return odd; } return even; } module.exports = checkOddOrEven;
- 다른 파일에서 이 파일(var.js)을 불러올 시 module.exports에 정의된 값들을 사용할 수 있음
- require 함수로 불러올 모듈의 경로 작성
- module.exports와 require는 따로 선언하지 않았음에도 사용 가능 → 내장 객체
- ES2015 에서는 아래와 같이 사용
import { odd, even } from './var'; function checkOddOrEven(num) { if (num % 2) { return odd; } return even; } export default checkOddOrEven;
노드 내장 객체
노드에서 기본적인 내장 객체와 내장 모듈을 제공. 따로 설치하지 않아도 바로 사용할 수 있으며, 브라우저의 window 객체와 비슷하다고 보면 됨
global
- 브라우저의 window와 같은 전역 객체임. 전역 객체이므로 모든 파일에서 접근할 수 있음 → 파일 간에 간단한 데이터 공유도 가능함
- window.open 메서드를 그냥 open으로 호출할 수 있는 것처럼 global도 생략할 수 있음(require도 global.require임)
__filename, __dirname
- 현재 파일명과 현재 파일 경로에 대한 정보임
module, exports, require
- 모듈 만들 때 module.exports 가 아닌, exports 객체로도 모듈 만들 수 있음
노드에서 this는 무엇?
console.log(this); // {} console.log(this === module.exports); // true console.log(this === exports); // true function whatIsThis() { console.log('function', this === exports, this === global); } whatIsThis(); // function false true