邊界情況!我作為 ES6 規範的專案編輯,我的生活全都是關於邊界情況。如同大多數軟體,程式語言功能的設計通常是由特定使用案例所驅動。但程式設計師可以而且經常以新穎的方式使用語言功能,而這些方式遠遠超出那些原始使用案例的範圍。此外,沒有任何語言功能是獨立存在的。每個功能都可能與其他每個功能互動。這些意外的用途和功能互動就是邊界情況的領域。
例如,考慮一個函式,其參數預設值初始化表達式使用 eval 函式,先宣告一個與函式主體中宣告的區域變數同名的區域變數,然後回傳一個參照該名稱的箭頭函式,作為參數值。如果函式主體中的程式碼存取參數值並呼叫箭頭函式,會發生什麼事?會存取哪個變數?是否有應該偵測和回報的錯誤?在 ES6 設計期間,像這樣的邊界情況讓我夜不成眠。
良好的語言設計至少必須考量此類邊界情況。一個將會有許多實作的廣受歡迎語言的規範必須明確說明所有邊界情況會發生什麼事。否則,語言的不同實作將會以不同的方式處理邊界情況,而程式在各處的執行結果將不盡相同。
如果你真的想要了解 ES6,你必須了解每個功能如何運作,即使你處理的是不尋常的情況和邊界情況。Axel Rauschmayer 的《探索 ES6》與其他書籍不同之處在於,它真正關心 ECMAScript 的內部運作。它不只描述你可能已經了解的常見使用案例。它深入探討語意,並在必要時深入探討邊界情況。它說明功能為何以它們運作的方式運作,以及它們如何在實際程式碼中使用。吸收本書中的資料,你將成為 ES6 專家。
艾倫·威爾夫斯-布洛克
ECMAScript 2015 (ES6) 規範編輯