2024-04-23|閱讀時間 ‧ 約 24 分鐘

[ JavaScript 筆記] JavaScript 定義

前言:
一直想要把自己的學習筆記整理整理,至少在寫下筆記的時候,也能釐清觀念。
結果拖延到現在,終於要提筆了,不知道能堅持多久(???)。

從定義開始,

首先來看 MDN 的定義:

JavaScript (JS) is a lightweight interpreted (or just-in-time compiled) programming language with first-class functions. While it is most well-known as the scripting language for Web pages, many non-browser environments also use it, such as Node.js, Apache CouchDB and Adobe Acrobat. JavaScript is a prototype-based, multi-paradigm, single-threaded, dynamic language, supporting object-oriented, imperative, and declarative (e.g. functional programming) styles.

我完全看不懂,來拆解一下:

Interpreted or just-in-time compiled 即時編譯語言

即時編譯語言結合了直譯式 & 編譯式的特點,讓 JS 在程式執行期間進行編譯,提升了執行速度。

編譯的步驟大致上長這樣:

  • 解析/讀取程式碼
  • 編譯成 machine code(第一次編譯成未優化版本)
  • 執行 machine code(在 Call Stack 中執行)
  • 執行期間 在後台優化並重新編譯 優化後取代原版本繼續執行

而 JS 擁有直譯式語言的特性,所以它無法獨立執行,只能在執行環境 Runtime 中使用。

Runtime
也可以稱為執行環境(有人比擬成工作室,我覺得很適合)
工作室(runtime)中放了 JS engine,以及這間工作室需要的工具。

最常見的 runtime 就是瀏覽器,包含了 JS engine、web APIs、cb queue;
另一種 runtime 是 Node.js,包含了 JS engine、C++ binding with thread pool、cb queue。

所以在 Node.js 中無法使用瀏覽器提供一些函式。


First-class functions 一級函式

在 JS 中,函式可以作為別的函式的參數、函式的返回值,賦值給變數或存儲在資料結構中,也就是說:

  • Functions 類型上是一種 object
  • Functions 有屬性
  • 可以被視為值、被儲存成變數
  • 可以傳遞給其他 functions 使用
  • 可以從其他 functions 返回 functions(好饒舌)
  • 可以在 functions 上呼叫方法


Prototype-based 基於原型的編程

  • 從原型(藍圖)建立物件,並從中繼承方法,因此可以使用該方法。


Multi-paradigm 多範型程式語言

可以使用想要的編程風格來寫程式,這讓 JavaScript 非常靈活。

  • Procedural programming - 線性式編程
  • Object-oriented programming - OOP 物件導向編程
  • Functional programming - FP 函式編程


Single-threaded 單線程語言

  • JS 是單線程語言,所有的程式碼片段都會在堆疊中(stack)被執行,一次只會執行一個程式碼。


Dynamically-typed language 動態語言

  • 不用手動宣告資料型態
  • 重新賦值時,變數的資料型態可以更改。
  • 類型檢查發生在運行時或執行時




先簡短解釋一下,因為字數有點太多了,
之後再一一擊破。(絕對不是懶惰!)
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.