Default Function Arguments

Quando um argumento não é passado ao invocar uma função, o valor é undefinied.

ES5 - Tratar e validar argumentos (Valores default)

O tratamento e validações eram de responsabilidade do dev, cada um implementava sua prórpia forma.
Solução 1

                                function mult(a, b){ 
                                    b = b || 1; 
                                    return a * b; 
                                }
                            
Definido valor default 1 caso b não seja passado
Solução 2

                                function mult(a, b){ 
                                    b = typeof b === 'undefined' ? 1 : b; 
                                    return a * b; 
                                }
                            
Definido valor default 1 caso b não seja passado - Resolve zero
Solução 3

                                function mult(a, b){ 
                                    if (typeof b === 'undefined'){ 
                                        b = 1;
                                    }
                                    return a * b; 
                                }
                            
Definido valor default 1 caso b não seja passado - Outra versão da Solução 2
O problema dessas soluções é que são verbosas.

ES6 - Tratar e validar argumentos (Valores default)

Forma não verbosa de atribuir valor default ao argumento durante a passagem de parâmetros.
Solução 1

                                function mult(a, b = 1){ 
                                    return a * b; 
                                }
                            
Solução 2

                                function mult(a, b = a){ 
                                    return a * b; 
                                }
                            
A ORDEM importa, não é permitido referenciar um argumento que vem depois, que ainda não foi definido.
Solução 3

                                function mult(a, b = a * 2){ 
                                    return a * b; 
                                }
                            
Solução 4

                                function randomNumber(){ 
                                    return Math.random() * 10; 
                                }
                                function mult(a, b = randomNumber()){
                                    return a * b; 
                                }
                            
randomNumber() é invocada toda vez q mult() é executada (Lazy Valuation)