六角學院 JS 核心筆記 (九)【執行環境與作用域】- 執行緒與同步、非同步
如果對執行緒的基本概念不太了解的話,可以參考電腦的核心 (Core) 和執行緒 (Tread)。
這邊還有兩個我很討厭的名詞:同步 (Synchronous) 和非同步 (Asynchronous)。因為中文的翻譯超容易誤解。同步有循序、依序的意思。非同步有同時的意思。
如果對執行緒的基本概念不太了解的話,可以參考電腦的核心 (Core) 和執行緒 (Tread)。
這邊還有兩個我很討厭的名詞:同步 (Synchronous) 和非同步 (Asynchronous)。因為中文的翻譯超容易誤解。同步有循序、依序的意思。非同步有同時的意思。
電腦科學中小數點如果採用 IEEE754 二進制浮點運算都有同樣的狀況,會出現精度丟失的問題。
核心就是封裝在積體電路 (IC) 中的處理器。而多核心就是多核處理器 (Multi-core processor),是物理上實體存在的。例如:2 核心就是有 2 個獨立實體處理器,可以分別獨立地執行程式或執行緒 (thread) 指令,利用平行計算的能力加快程式的執行速度。
記憶體的管理,在早期是軟體工程師一個很重要很困難的課題。現代大部分高階語言中多虧了回收機制 (Garbage Collection),能讓軟體工程師的負擔稍微少了一點。
not defined
和 undefined
是 JavaScript 中很基礎卻也很重要的觀念。
Hoisting 基本概念就是:將非函式和函式宣告的動作,抽象地提升到程式碼最前面的動作,讓程式進入執行階段前,就預先完成宣告。
提升 (Hoisting) 在 JavaScript 中,對於變數和函式的宣告和運行順序是很重要的觀念。但是在 ECMAScript 中其實沒有這個專有名詞,「提升」只是一個大家的共識、共同的說法,它的相關概念是寫在 Execution Contexts 中。其實我剛學 JavaScript 時,覺得它真的很奇怪,為什麼不要像其他程式一樣,好好在最前面宣告完就沒事了呢?(摔
當函式的本身沒有宣告該變數時,函式就會一層一層向外層 / 上層來做尋找,而這一連串就是範圍鍊。
語法作用域 (Lexical scope) 的類別則是在探討有相同的變數名稱時,該變數需要參照哪一個值,也就是變數和值之間的聯繫 (binding)。