Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

為什麼大家都說 async/await 是 ES7 的規範呢? #2

Open
HelloJunWei opened this issue Jun 1, 2020 · 0 comments
Open

為什麼大家都說 async/await 是 ES7 的規範呢? #2

HelloJunWei opened this issue Jun 1, 2020 · 0 comments
Labels

Comments

@HelloJunWei
Copy link
Owner

HelloJunWei commented Jun 1, 2020

為什麼大家都說 async/await 是 ES7 的規範呢?

前言

在上一篇Javascript decorator 你搞得我好亂呀 中有提到根據 ECMAScript 的文件,async/await 是規範在 ECMA2017 (ES8) 而不是 ECMA2016 (ES7) 今天我就來試試看尋找為什麼大家都說是 ES7 的源頭吧。

萬事先 google

首先我先 google: ES7 async/await
再來 google: ES8 async/await

可以看到網路上有些人說是 ES7 ,也有些人說 ES8。(但如果只用 async/await google的話,我查到的都是說 ES7)

接下來試著去 TC39 的文件中找找蛛絲馬跡吧!

tc39 async/await 中我們可以找到 async/await 的規格書從日期上是在 2016 1月的時候,但 ECMA2016 (ES7) 發布時間是在 2016 6月的時候。所以有可能是因為時間上接近所以大家都誤以為他是 ECMA2016 (ES7) 的標準嗎?

而且根據 TC39 process 中提到的,stage 3 的規格書基本上可以當作是最終版的規格書,除非有重大的 bug 或者錯誤,不然不會更改。所以根據 stage 3 的規格書去應用 async/await 是沒問題的。

V8 以及 babel 是什麼時候加入 async/await 的特性呢?

竟然知道了規格書是在 2016/01 的時候出現,那就來看看 v8 以及 babel 是什麼時候加入特性的。或許因為他們加入的時間導致某部分的人以為 async/await 是 ECMA2016 (ES7) 的規範。

v8

進入到 v8 的 github 在 commit 中搜尋 async await 應該就可以 v8 知道是什麼時候加入async/await的。

所以 commit message 真的不能亂寫呀

在 2016 5月時候的 commit 可以看到 v8 加入了 async/await [esnext] implement frontend changes for async/await proposal

babel

同理,一樣到 babel 的 github 利用 commit 去搜尋。

驚人的是...... babel 早在2014的11月就把 async/await 實作了 Implement ES7 Async/Await 而且標題直接打上 Implement ES7 Async/Await,不過那時候連 ECMA2015 (ES6) 都還沒出來呀~ 所以你就是兇手!? (欸

結論

這一次的經驗對實際開發並沒有太大的幫助,況且,是不是因為 babel 的 commmit 讓人誤以為 async/await 是ECMA2016 (ES7) 的規範,這單純只是我的猜測,真相或許不是這樣。

總之,感謝這麼多人的努力,讓我可以用方便的語法糖開發,至於他是什麼年份的規範,就不用花太多心思計較了。

以後有人跟你說 async/await 是 ES7 的,你可以大聲的跟他說「不~他是 ES8 的」。

參考資料

  1. babel
  2. v8
  3. async function
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant