(… ()) Vs. (…) () em encerramentos de javascript

Eu sei que isso é bobo, mas há alguma diferença entre isso:

(function() { var foo = 'bar'; })(); 

e isto?

 (function() { var foo = 'bar'; }()); 

O JSLint nos diz para Move the invocation into the parens that contain the function , mas não vejo necessidade disso.

Edit: As respostas são muito legais. ~function , a alternativa do JSHint, juntamente com a preferência do jQuery por (/***/)(); e a explicação de Crockford! Eu pensei que eu iria apenas pegar uma resposta “eles são a mesma coisa”.
Vocês decidem o melhor através de votos positivos e eu faço um tick.

Não há diferença. Ambas são formas válidas de fazer com que o analisador JavaScript trate sua function como uma expressão em vez de uma declaração .

Note que + e ! também funcionará, e às vezes são usados ​​por minificadores para salvar um caractere de tamanho:

 +function() { var foo = 'bar'; }(); !function() { var foo = 'bar'; }(); 

EDITAR

Como @copy indica, por completude, ~ e - também funcionarão.

 -function() { var foo = 'bar'; }(); ~function() { var foo = 'bar'; }(); 

Essa violação do JSLint existe porque Douglas Crockford diz que a versão dos parênteses externos se parece com “bolas de cachorro”.

Você pode ouvi-lo discutir isso neste vídeo :

Eu acho que parece bobo, porque o que estamos falando é toda a invocação, mas nós temos essas coisas penduradas do lado de fora parecendo … bolas de cachorro.

Ele sugere que os parênteses dentro ajudem o leitor a entender que a declaração inteira é uma expressão de function em vez de uma declaração.

Não, não acredito que haja diferença. Eu pessoalmente prefiro o primeiro (e jQuery et al. Parecem concordar), mas ambos funcionam de forma idêntica em todos os motores que testei.

Além disso, o JSLint é um pouco estrito demais às vezes. O JSHint pode ser um pouco melhor nesse aspecto.

    Intereting Posts