1) se exports non è undefined i metodi vengono agganciati a quell'object, altrimenti come fallback vengono esportati nell'oggetto window. è un costrutto ternario

2) Le parentesi aggiuntive sono necessarie per far sì che la funzione produca un lexical scope e che tutto il costrutto sia visto come
codice:
(<expression>)()
dove la seconda coppia di parentesi è l'invocazione di tutta l'espressione (cioè la funzione)

si può comunque scrivere (ed è la versione più diffusa)
codice:
(<expression>())