esnext:最後一個參數後面也容許加逗號了

https://jeffmo.github.io/es-trailing-function-commas 目前是一個 stage 3 的提案,Chakra 和 JSC 已經實現了,它容許咱們在函數定義時的最後一個形參和函數調用時的最後一個實參的尾部加上逗號。git

最後一個參數加上逗號有什麼優勢?

注意:最後一個參數加逗號的優勢只在參數分行寫時才能體現出來。github

優勢1:修改代碼時不容易出錯

假如當前的代碼長這樣:json

function foo(
    param1,
    param2,
    param3
)

而你此時要作的是刪除 param3 參數的實現,這時你頗有可能把光標定位到 param3 那一行,連續按下 Command+X 和 Command+S 了事(Sublime):數組

function foo(
    param1,
    param2,
)

一測試,SyntaxError!恍然大悟,回去再把逗號刪掉。編輯器

假如是新增一個參數呢,問題也相似,你得留心給上一個參數補上逗號;調整參數的順序(Sublime 用 Ctrl + Command + ↑↓)也相似。除了形參,函數調用時傳入的實參也一個道理。ide

若是每一個參數尾部都已經加上了逗號,那麼就不存在上面說的這些問題了。函數

優勢2:對 git/hg blame 更友好

我專門用 git 生成了一個演示用的倉庫,裏面有一個演示文件 test.js:測試

我如今想知道 param3 和對應的 arg3 是誰在哪一個 commit 里加上去,因此我會執行 git blame test.js:spa

git blame 告訴我,是小李在 11e537fc 此次 commit 里加的。但當你查看那個 commit 的變動時,就會發現,錯了,小李只是在實現 param4 時迫於無奈給 param3 補了個逗號,完整的 git log -p test.js 才能看到真相,真正實現 param3 的是小張,並且同時也能發現,小張在實現 param3 的時候也被迫改動了 param2 那一行:rest

若是每一行參數尾部都有逗號,那麼開發人員就不須要修改和本次 commit 無關的行,從而就不會污染 git/hg blame。

參數分行寫有什麼優勢?

有些同窗就問了:「這提案對我沒用啊,我全部的參數都是寫在一行裏的」。的確,若是你從不把參數分行寫,那你壓根用不上這個特性。不過,參數分行寫的確是有用的:

優勢1:能避免行過長

若是參數太多,或者某個實參是個長字符串,那麼參數寫在一行就會讓編輯器出現橫向滾動條,既不美觀,也很差讀。

優勢2:對 git/hg blame 更友好

就像前面演示的,若是你全部的參數都寫在一行裏,你就沒法 blame 到每一個參數被添加的 commit。有些同窗懷疑了?真的有人這麼寫嗎?是真的,我電腦上恰好有個 V8 的倉庫,咱們用下面的 grep 命令查找一下:

grep -zoPR --include='*.js' 'function \w+\(\n([\s\w]+,(.+)?\n)+[\s\w]+\)'

果真找到了一個:

git blame 一下呢:

 

每一個參數的 commit 都能方便的拿到!這在多人合做的開源項目裏很重要。

優勢3:避免分支衝突

顯而易見,兩個分支同時在一行上添加新的參數,必然會產生衝突。

優勢4:方便加註釋

若是你須要爲每一個參數添加註釋,除了分行寫還有什麼選擇嗎?一樣在 V8 的倉庫裏 grep 到了真實案例,是給每一個實參加了註釋:

上面說的這些對對象字面量和數組字面量也一樣適用吧?

對,上面說的加逗號的優勢和分行的優勢對 {} 和 [] 一樣適用,{} 是在 ES5 裏支持尾部加逗號的,[] 從誕生時就支持,由於它須要支持稀疏數組,好比 [1,,,]。

JSON 呢?

「何時 json 規範能改,不統一掉很難受啊?」 是啊,我也想,但我也不知道何時能改。

能進 ES 幾?

ES8(2017)仍是 ES9(2018)?不要再 care 了,如今是先有實現後進規範,就像 Chrome 的版本號同樣,隨它漲去吧。目前 Spidermonkey 和 V8 還沒開始實現,我已經給 V8 提了需求 https://bugs.chromium.org/p/v8/issues/detail?id=5051

幾個語法限制

下面這些都是 SyntaxError:

function foo(,){} // 沒參數只有個逗號
function foo(param1,,){} // 連續的兩個逗號
function foo(param1,...rest,){} // 剩餘參數後面還有逗號,由於剩餘參數必須是最後一個參數
相關文章
相關標籤/搜索