Em JavaScript, o operador de agrupamento, os parênteses “()” podem conter apenas expressões. O que significa que não posso fazer algo assim:
(var bar = 7)
JavaScript ficará chateado e lançará um erro de sintaxe se eu tentar inserir uma instrução ou qualquer coisa que não seja uma expressão. Simples o suficiente, se o operador de agrupamento só aceita expressões, colocar uma declaração de função nele deve falhar, certo?
(function foo() {}) // Should throw an error
No entanto, se você executar isso em seu console, funcionará bem! Acontece que as funções podem ser expressões, bem como uma declaração, simplesmente depende de como você as cria. O operador de agrupamento pode ser ótimo para forçar o código a agir como uma expressão, usando eval em json.
http://kangax.github.io/nfe/ É um ótimo post que entra em detalhes sobre a declaração e expressão de funções. Eu sugiro a leitura.