なるほど、と思ったのでメモ
前提
この仕様はECMA2015からの仕様です、IE11などでは動かない話なのでお気をつけください。
今回着目したいコード
引数に何も設定されていないときに代わりの値として入るデフォルト引数を書く場合の関数を考える
function test(x = 1, y = 1) { console.log(`${x} , ${y}`) }
通常の動き
引数が何も設定されていないとデフォルト引数が使われる
test() // 1 , 1 test(100) // 100 , 1 let setVal = 30 test(setVal,20) // 30 , 20
undefinedな値を引数に使う場合の動き
引数にundefined相当のものがセットされると、undefinedが入らずデフォルト引数の値が入る
test(undefined,100) // 1 . 100 let nonSetVal test(20,nonSetVal) // 20 , 1