Mình xin bổ sung theo góc độ của history:
1- JS được sinh ra để giúp các trang web trở nên động đậy (animation) và tương tác (interactive). Tên gốc của nó là EcmaScript (viết tắt là ES). Thế nên lúc đầu nó là ngôn ngữ dạng thông dịch. Specs mới nhất là ES8 (ES2017 http://www.2ality.com/2016/02/ecmascript-2017.html)
2- Ban đầu JS không cần engine gì để chạy cả vì lúc đó chỉ có mỗi browser cần parser JS code và JS lúc đó cũng đơn giản. Sau browser được chia thành các module: module parser JS (JS Engine), module parser HTML/CSS và render thành trang web (Gecko của Firefox, Webkit/Blink của Chrome), module UI (các nút back/…). Đa phần JS Engine giờ đều là JIT compiler, nên cho tốc độ thực thi rất tốt.
3- Node.JS là JS runtime environment, còn browser là app có khả năng chạy code JS. Gọi NodeJS là env vì nó có các thư viện, các biến môi trường mà nếu dùng code JS hoàn toàn có thể thay đổi, thêm mới, tương tác với môi trường được (NodeJS dùng v8 làm bộ compiler). Còn browser thì chỉ gọi là app thôi, và JS không chỉ làm việc với DOM API mà còn làm việc với File API (local storage, file upload), Geo API, History API (address bar),…
4- CoffeeScript, TypeScript, Elm thường được gọi là ngôn ngữ transpilation (chuyển đổi) vì level của TypeScript và JS là tương đương nhau, viết code JS trong TypeScript thì TS vẫn hiểu được. Còn compilation thường nói về việc chuyển sang ngôn ngữ bậc thấp hơn, ví dụ như JS Engine, nó chuyển code JS sang bytecode. Sự ra đời của những ngôn ngữ này bởi JS là loose-type nên code khá ngẫu hứng, khó check kiểu (type) -> chuyển sang các ngôn ngữ strong-type sẽ dễ code hơn, kiểm soát cũng dễ hơn. Ví dụ như #Kit, GWT sử dụng C# và Java sau đó transpile sang JS. Tương tự như vậy, CS, TS, Elm cũng giúp việc viết code strong-type (cú pháp gần tương tự JS nên dễ học hơn C#, Java), sau đó sẽ được transpile sang JS.
5- Babel: cũng là một transpilation tool, đồng thời là một polyfill giúp cho chuyển đổi các hàm mà ES6 có nhưng ES5 chưa có (những hàm này trên ES6 được viết bằng C++). Lý do là rất ít trình duyệt support full ES6 (trừ firefox) nên Babel sẽ cung cấp các hàm này viết bằng JS thuần.
Ngoài ra, để làm frontend các bạn cũng nên tìm hiểu thêm một số tool như:
- Framework: AngularJS, VueJS
- Task Runner Tool: Gulp, Grunt giúp cho việc tự động hoá một số tác vụ perf cho app như: minimize JS, CSS (webpack), obfucate (uglyJS, …), làm sprite ảnh, ghép các file svg vào 1 file, …
- Một số Test FW (cả UnitTest lẫn Behaviour Test) như: Qunit, Mocha, Jasmine, PhantomJS …
- Lint check.
- …